阻塞赋值和非阻塞赋值设计四位移位寄存器代码和测试程序Verilog
时间: 2024-05-02 16:17:02 浏览: 155
Verilog中阻塞赋值和非阻塞赋值的正确使用
以下是一个简单的四位移位寄存器的 Verilog 代码和测试程序,包括阻塞赋值和非阻塞赋值的实现。
代码如下:
```
module shift_register(
input clk,
input rst,
input shift_in,
input shift_en,
output reg [3:0] shift_out
);
// 阻塞赋值
always @(posedge clk, posedge rst) begin
if (rst) begin
shift_out <= 4'd0;
end else if (shift_en) begin
shift_out <= {shift_out[2:0], shift_in};
end
end
// 非阻塞赋值
always @(posedge clk, posedge rst) begin
if (rst) begin
shift_out <= 4'd0;
end
end
always @(posedge clk) begin
if (shift_en) begin
shift_out <= {shift_out[2:0], shift_in};
end
end
endmodule
```
测试程序如下:
```
module shift_register_test;
reg clk;
reg rst;
reg shift_in;
reg shift_en;
wire [3:0] shift_out;
shift_register dut(
.clk(clk),
.rst(rst),
.shift_in(shift_in),
.shift_en(shift_en),
.shift_out(shift_out)
);
initial begin
clk = 0;
rst = 1;
shift_in = 0;
shift_en = 0;
#10 rst = 0;
#10 shift_en = 1;
#10 shift_in = 1;
#10 shift_in = 0;
#10 shift_in = 1;
#10 shift_in = 0;
#10 shift_in = 1;
#10 $finish;
end
always #5 clk = ~clk;
endmodule
```
在测试程序中,我们首先将 `rst` 信号置为高电平,然后将 `shift_en` 信号置为高电平并分别输入 1、0、1、0、1、0,最后模拟结束。我们可以通过仿真验证阻塞赋值和非阻塞赋值的正确性。
阅读全文