马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我将4位的输入 在时钟上升沿赋给输出寄存器,结果输出寄存器在数据稳定前 出现不该有的值!
我又在输出和输入之间加入了一级中间寄存器,输入给中间寄存器,中间寄存器在给输出,结果中间寄存器的数据稳定变化,输出端不稳定。在加中间寄存器后,结果类似:输出端不稳,中间寄存器稳定。我又把中间寄存器也作为输出,结果输出端和作为输出的中间寄存器输出都不稳定 望大虾指点!!!代码如下:
直接复制的代码:
module count(data,data1,clk,rst);
output [3:0] data;
input clk;
input rst;
reg [3:0] data;
input [3:0] data1;
always@(posedge clk )
if(rst==0)
data<=1110;
else
data<=data1;
endmodule // count
输入直接赋给输出的波形
中间加了一个寄存器data2后的代码:
module count(data,data1,clk,rst);
output [3:0] data;
input clk;
input rst;
reg [3:0] data;
input [3:0] data1;
reg [3:0] data2;
always@(posedge clk )
if(rst==0)
data2<=0;
else
data2<=data1;
always@(posedge clk)
data<=data2;
endmodule // count
有中间寄存器data2后的输出波形
加了一级中间寄存器data2的波形
加了中间寄存器data2 data3后的代码同时将data3作为输出的代码:
module count(data,data1,data3,clk,rst);
output [3:0] data;
input clk;
input rst;
reg [3:0] data;
input [3:0] data1;
reg [3:0] data2;
output reg [3:0] data3;
always@(posedge clk )
if(rst==0)
data2<=1110;
else
data2<=data1;
always@(posedge clk)
data3<=data2;
always@(posedge clk)
data<=data3;
endmodule // count
加了data2 data3中间寄存器的,并且data3和data都为输出
testbench
`timescale 1ns/1ns
module count_test();
wire [3:0] data;
wire [3:0] data3;
reg rst;
reg [3:0] data1;
reg clk;
count M1(.data(data),.data3(data3),.data1(data1),.clk(clk),.rst(rst));
initial #3000 $finish;
initial
begin
clk=0;
forever #20 clk=~clk;
end
initial
begin
rst=1;
#10 rst=0;
#35 rst=1;
end
always@(posedge clk)
data1<={$random}%16;
endmodule // count_test |