Mar*_*son 23
"一般法则"就是这样
您的流程需要知道的有关需求变化的任何内容都在敏感列表中.
对于具有同步复位的典型可合成寄存器:
process (clk) is
begin
if rising_edge(clk) then
if reset = '1' then
-- do reset things
else
-- read some signals, assign some outputs
end if;
end if;
end process;
Run Code Online (Sandbox Code Playgroud)
只有时钟需要在列表中,因为其他所有内容只在时钟发生变化时才会被查看 (由于if rising_edge(clk)
声明.
如果需要异步重置:
process (clk, reset) is
begin
if reset = '1' then
-- do reset things
elsif rising_edge(clk) then
-- read some signals, assign some outputs
end if;
end process;
Run Code Online (Sandbox Code Playgroud)
然后reset
信号也必须在灵敏度列表中,因为您的设计需要在每次更改时检查它的值,而不管时钟在做什么.
对于组合逻辑,我完全避免使用过程,因为保持灵敏度列表最新的问题,然后模拟的可能性与合成代码的行为不同.all
VHDL-2008中的关键字已经缓解了这种情况,但我仍然没有发现自己想要编写冗长复杂的组合逻辑,这样一个过程就会有所帮助.
Jos*_*osh 14
如果信号位于过程的灵敏度列表中,则该过程将"唤醒"并在该信号的值发生变化时进行评估.如果它不在灵敏度列表中,则信号可能会发生变化,但不会重新评估过程以确定新输出应该是什么.
对于组合逻辑:可能您希望所有输入信号都包含在灵敏度列表中.如果它们不包含在灵敏度列表中,那么即使输入信号发生变化,也会导致输出不变.这是一个常见错误(由于疏忽).请注意,在VHDL 2008中,您可以使用"all"关键字自动包含流程中的所有必要信号,并避免创建锁存器.
对于同步逻辑:可能您只想在灵敏度列表中显示您的时钟(可能还有您的重置)信号.这是因为当您的系统时钟发生变化时,您只关心信号的值(时钟除外).这是因为您通常会描述仅允许在时钟边沿上更改其输出值的寄存器(由触发器组成).
在使用HDL进行综合的情况下,所有这些都可能令人困惑,因为您在VHDL中描述的电路的子集实际上只能在FPGA中实现.例如,您不能拥有对两个独立时钟边沿敏感的原始存储器元素,即使您可以通过在灵敏度列表中包含两个时钟来描述这样的电路.
归档时间: |
|
查看次数: |
55237 次 |
最近记录: |