关于寄存器,这两种VHDL表达是否对综合和仿真有影响?
时间:10-02
整理:3721RD
点击:
一个基本的寄存器模型,用如下两种方式描述:
1.进程
process(clk,rst,d)
.....
if rst = '1' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
......
2.类似组合逻辑的方式
q <= '0' when rst = '1' else
d when rising_edge(clk);
用第2种方式描述的时候,nlint检查会报combinational loop
1.进程
process(clk,rst,d)
.....
if rst = '1' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
......
2.类似组合逻辑的方式
q <= '0' when rst = '1' else
d when rising_edge(clk);
用第2种方式描述的时候,nlint检查会报combinational loop
第一种方式没有必要把d放进去,时序逻辑只要有clk和异步的reset即可;至于第二种,没研究过。一般也不这么用。
LZ 的第二种方法太牛XX了,膜拜了。
小编不要想当然。
这两周方式都不对。
用下面的模板吧。
process(clk,rst) -- 没有d,只有clk和reset
begin
if rst = '1' then
.....
elsif clk'event and clk='1' then
.....
end if;
end process;
为什么不能把d放进敏感变量?求小编解释
求解释
求解释!
q <= d
赋值操作是在时钟上升沿进行的,若d在其他时刻变化,q的值并不会发生改变,所以敏感列表中只需加入rst和clk。
没有解释,只因为是时序逻辑,一切变化依赖于时钟而已。
数字电路、同步电路、触发器结构。
敏感变量表里面是触发整个process动作的条件,一般FPGA里面是D触发器,只能由CLK/RESET触发。
要把RTL和数字电路联系起来。
如果没学过数字电路,去学。
如果没学好,去复习。
谢谢指教,不过这些基本的我还是知道,毕竟做数电还是有几年了
那对你而言,写RTL只要入门,就是一马平川。
OK,那好吧
