Verilog:同一寄存器在always语句中可以被引用多次吗?
我正在写一个Verilog HDL模块来消除按下按钮时的抖动。首先,我使用两个名为sync_0和sync_1的触发器将按键与时钟同步,如下所示:Verilog:同一寄存器在always语句中可以被引用多次吗?,verilog,hardware,system-verilog,hdl,flip-flop,Verilog,Hardware,System Verilog,Hdl,Flip Flop,我正在写一个Verilog HDL模块来消除按下按钮时的抖动。首先,我使用两个名为sync_0和sync_1的触发器将按键与时钟同步,如下所示: Input -> sync_0 -> sync_1 我的问题是,我是否可以将这两个操作合并为一个始终块,如下所示: // Synchronize the switch input to the clock reg sync_0, sync_1; always @(posedge clk) begin sync_0
Input -> sync_0 -> sync_1
我的问题是,我是否可以将这两个操作合并为一个始终块,如下所示:
// Synchronize the switch input to the clock
reg sync_0, sync_1;
always @(posedge clk)
begin
sync_0 <= switch_input;
sync_1 <= sync_0;
end
// Synchronize the switch input to the clock
reg sync_0, sync_1;
always @(posedge clk)
begin
sync_0 <= switch_input;
end
always @(posedge clk)
begin
sync_1 <= sync_0;
end
还是需要像这样分解:
// Synchronize the switch input to the clock
reg sync_0, sync_1;
always @(posedge clk)
begin
sync_0 <= switch_input;
sync_1 <= sync_0;
end
// Synchronize the switch input to the clock
reg sync_0, sync_1;
always @(posedge clk)
begin
sync_0 <= switch_input;
end
always @(posedge clk)
begin
sync_1 <= sync_0;
end
编辑:更清楚地说,我的问题是:可以将sync_0放在非阻塞赋值的左侧和右侧的同一个always块中吗。或者应该将这两个作业分成两个单独的“始终”块。两者都很好,我只是想知道哪个练习更好。语法正确。只要这些reg具有相同的敏感度列表,就可以将它们放在一个始终块中。每个reg都是一个独立的电路实体,它有自己的驱动锥并并行运行。工具可以解决这个问题。然而,在现实世界中,建议仅描述那些功能相关信号和/或共享相同控制结构的信号,例如相同或几乎相同的if-else控制。在你的情况下,你当然可以把它们放在一起。我更喜欢这样,因为在屏幕上阅读时可以看到更多的代码