在vivado上做了一个流水灯实验的仿真,仿真图像能显示输入值,但led显示的值却是XXXXXXXX,测试代码应该是正确的,估计是执行代码出了问题,由于楼主水平有限,故发贴请高手帮忙找出错误,现将代码粘贴如下:
顶层:
module runled_top(
input iClk,
input iRst_n,
output [7:0] oLed
);
wire clk2hz_sig;
timer500ms timer500ms_inst(
.iClk100mhz(iClk),
.iRst_n(~iRst_n),
.oClk2hz(clk2hz_sig)
);
led_ctrl led_ctrl_inst(
.iClk(clk2hz_sig),
.iRst_n(~iRst_n),
.oLed(oLed)
);
endmodule
时钟发生:
module timer500ms(
input iClk100mhz,
input iRst_n,
output reg oClk2hz // period = 1/2s
);
reg [31:0] cnt2hz;
always @(posedge iClk100mhz) begin
//iClk100mhz=1;
//iRst_n
if(iRst_n==1'b0) begin
oClk2hz <= 1'b0;
cnt2hz <= 32'b0;
end
else begin
if(cnt2hz==32'd25000000) begin
cnt2hz <= 32'b0;
oClk2hz <= ~ oClk2hz;
end
else begin
cnt2hz <= cnt2hz + 1'b1;
oClk2hz <= oClk2hz;
end
end
end
endmodule
led控制模块:
module led_ctrl(
input iClk,
input iRst_n,
output [7:0] oLed
);
reg [7:0] led;
/*
\ 每个时钟上升沿,左移1bit,写法是为了实现循环左移
*/
always @(posedge iClk) begin
if(iRst_n==1'b0)
led <= 8'b1;
else
led <= {led[6:0],led[7]};
end
assign oLed = led;
endmodule
程序测试代码:
module aa_tb;
// Inputs
reg iClk;
reg iRst_n;
// Outputs
wire [7:0] oLed;
// Instantiate the Unit Under Test (UUT)
runled_top uut (
.iClk(iClk),
.iRst_n(iRst_n),
.oLed(oLed)
//.clk2hz_sig(clk2hz_sig)
);
initial begin
// Initialize Inputs
iClk = 0;
iRst_n = 0;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
iRst_n =1 ;
end
always #10 iClk=~ iClk;
endmodule
最后的仿真图像如下:
file:///C:/Users/Administrator/Documents/Tencent%20Files/190782612/Image/C2C/%7B738HV7%7B%609)HVE~(%25WAIXSX.png
请高手帮忙查出错误,十分感谢。。。
|