Vhdl 在VDHL中创建转速表
我被分配了使用VDHL来编程设备的任务,创建一个转速表。我已经提供了一个引脚,其中一个输入信号将被连接,并从中需要显示每秒发生的频率(频率)。之前我只使用VHDL编程过几次,现在很难弄清楚如何实现代码: 到目前为止,我已经构建了设备需要采取的以下步骤Vhdl 在VDHL中创建转速表,vhdl,Vhdl,我被分配了使用VDHL来编程设备的任务,创建一个转速表。我已经提供了一个引脚,其中一个输入信号将被连接,并从中需要显示每秒发生的频率(频率)。之前我只使用VHDL编程过几次,现在很难弄清楚如何实现代码: 到目前为止,我已经构建了设备需要采取的以下步骤 通过根据输入信号创建一个进程来计算输入信号中的逻辑值 我通过创建一个依赖于输入信号的过程来实现这一点,并在输入信号中出现高电平时增加一个变量 counthigh:process(input_signal) -- CountHigh process
counthigh:process(input_signal) -- CountHigh process
begin
if (input signal = '1') then
current_count := current_count+1;
end if;
end process; -- End process
statereset:process——statereset进程
开始
等待上升沿(c_clk);--在每个上升沿上
如果(reset='0'),则
当前的
我理解你想要达到的目标,但这是行不通的。在模拟中,每次输入信号
变高或变低时,它都会计数,这很好,但此代码不会合成
计数器需要时钟,有时钟的进程需要上升沿。我希望您的输入频率低于您的工作时钟,因此我建议您使用使用使用您的时钟运行的边缘检测器。我将把它作为练习,但是
要等待1秒或其他时间,请使用计数器。如果您的时钟为5MHz,请使用信号从0到4_999_999进行计数。当计数器为4_999_999时,重置计数器、边缘检测器并更新显示器
顺便说一句,既然你是初学者,试着用信号代替变量。变量的行为与编程语言类似,但在合成中使用时会有很多陷阱。对于初学者,我建议坚持使用信号,一旦你习惯了它们,并且更好地理解了VHDL的工作原理,你就可以重新使用变量了。在我自己的合成设计中,我有大约95%的信号,这是FPGA设计师的标准。这是学校作业吗?每周大学实验室(VHDL简介)输入信号的Fmax是多少?如果它比c_-clk慢得多,你可以将它同步到c_-clk并使用你当前的方法。否则,您将需要在2个时钟域中计数。这需要交叉时钟电路将启动/停止信号从1秒计时器交换到频率计数器。像这样的互联网搜索是一个很好的开始,你可以找到这篇文章:。
statereset:process -- StateReset process
begin
wait until rising_edge(c_clk); -- On each rising edge
if (reset='0') then
current_s <= s0; -- Default state on reset.
else
current_s <= next_s; -- Update the current state
end if;
end process; -- End process
counthigh:process(input_signal) -- CountHigh process
begin
if (input signal = '1') then
current_count := current_count+1;
end if;
end process; -- End process