用verilog描述一个具有左移和右移的4位寄存器,分别用阻塞赋值和非阻塞赋值
时间: 2024-05-01 10:21:44 浏览: 77
使用阻塞赋值描述:
```
module shift_register(
input clk, // 时钟信号
input rst, // 复位信号
input [3:0] din, // 数据输入
input left_shift, // 左移使能信号
input right_shift,// 右移使能信号
output reg [3:0] dout // 数据输出
);
always @(posedge clk or posedge rst) begin
if (rst) begin
dout <= 4'b0000;
end
else begin
if (left_shift) begin
dout <= {dout[2:0], din[3]};
end
else if (right_shift) begin
dout <= {din[0], dout[3:1]};
end
else begin
dout <= din;
end
end
end
endmodule
```
使用非阻塞赋值描述:
```
module shift_register(
input clk, // 时钟信号
input rst, // 复位信号
input [3:0] din, // 数据输入
input left_shift, // 左移使能信号
input right_shift,// 右移使能信号
output reg [3:0] dout // 数据输出
);
always @(posedge clk or posedge rst) begin
if (rst) begin
dout <= 4'b0000;
end
else begin
dout <= dout;
if (left_shift) begin
dout[0] <= din[3];
dout[1] <= dout[0];
dout[2] <= dout[1];
dout[3] <= dout[2];
end
else if (right_shift) begin
dout[0] <= dout[1];
dout[1] <= dout[2];
dout[2] <= dout[3];
dout[3] <= din[0];
end
else begin
dout <= din;
end
end
end
endmodule
```
阅读全文