并行输入并行输出寄存器
Parallel In Parallel Out Register
PIPO
模块实现了并行输入并行输出寄存器。它接收这些输入 (clk,reset,pipo_in,load) 和输出 (pipo_out).
如果复位信号为高电平,pipo_out = 0。
如果负载信号为高电平,则输出任何新的pipo_in。
但是,如果负载信号不高,那么pipo_out应该显示之前的输出值。现在我正在做的是 pipo_out = 0;
可以做些什么改动,让负载信号不高的时候,pipo_out应该显示之前的输出值。
module PIPO (clk,reset,pipo_in,load,pipo_out);
input clk;
input reset;
input [3:0] pipo_in;
input load;
output reg [3:0] pipo_out;
always @(posedge clk)
begin
if (reset)
begin
pipo_out = 4'b0000;
end
else if (load)
begin
pipo_out = pipo_in;
end
else begin
pipo_out = 4'b0000;
end
end
endmodule
这是测试台:
`include "PIPO.v"
module PIPO_tb;
reg clk;
reg reset;
reg [3:0]pipo_in;
reg load;
wire [3:0]pipo_out;
PIPO iPIPO (.*);
initial begin
clk=0;
forever
#5 clk= ~clk;
end
initial begin
$monitor("Reset=%b Input=%b, load=%b output=%b",reset,pipo_in,load,pipo_out);
$dumpfile("PIPO_tb.vcd");
$dumpvars(0, PIPO_tb);
reset=0; pipo_in =4'b1001;load=1;#10;
reset=0; pipo_in =4'b1011;load=1;#10;
reset=0; pipo_in =4'b1101;load=1;#10;
reset=0; pipo_in =4'b0001;load=0;#10;
reset=0; pipo_in =4'b1111;load=1;#10;
reset=0; pipo_in =4'b1010;load=1;#10;
#200;
$finish;
end
endmodule
要保留先前加载的值,只需删除 else
子句:
always @(posedge clk)
begin
if (reset)
begin
pipo_out <= 4'b0000;
end
else if (load)
begin
pipo_out <= pipo_in;
end
end
对于顺序逻辑,您应该使用非阻塞 (<=
) 赋值。
PIPO
模块实现了并行输入并行输出寄存器。它接收这些输入 (clk,reset,pipo_in,load) 和输出 (pipo_out).
如果复位信号为高电平,pipo_out = 0。
如果负载信号为高电平,则输出任何新的pipo_in。
但是,如果负载信号不高,那么pipo_out应该显示之前的输出值。现在我正在做的是 pipo_out = 0;
可以做些什么改动,让负载信号不高的时候,pipo_out应该显示之前的输出值。
module PIPO (clk,reset,pipo_in,load,pipo_out);
input clk;
input reset;
input [3:0] pipo_in;
input load;
output reg [3:0] pipo_out;
always @(posedge clk)
begin
if (reset)
begin
pipo_out = 4'b0000;
end
else if (load)
begin
pipo_out = pipo_in;
end
else begin
pipo_out = 4'b0000;
end
end
endmodule
这是测试台:
`include "PIPO.v"
module PIPO_tb;
reg clk;
reg reset;
reg [3:0]pipo_in;
reg load;
wire [3:0]pipo_out;
PIPO iPIPO (.*);
initial begin
clk=0;
forever
#5 clk= ~clk;
end
initial begin
$monitor("Reset=%b Input=%b, load=%b output=%b",reset,pipo_in,load,pipo_out);
$dumpfile("PIPO_tb.vcd");
$dumpvars(0, PIPO_tb);
reset=0; pipo_in =4'b1001;load=1;#10;
reset=0; pipo_in =4'b1011;load=1;#10;
reset=0; pipo_in =4'b1101;load=1;#10;
reset=0; pipo_in =4'b0001;load=0;#10;
reset=0; pipo_in =4'b1111;load=1;#10;
reset=0; pipo_in =4'b1010;load=1;#10;
#200;
$finish;
end
endmodule
要保留先前加载的值,只需删除 else
子句:
always @(posedge clk)
begin
if (reset)
begin
pipo_out <= 4'b0000;
end
else if (load)
begin
pipo_out <= pipo_in;
end
end
对于顺序逻辑,您应该使用非阻塞 (<=
) 赋值。