iic的测试代码仿真时卡住。用不了
时间:10-02
整理:3721RD
点击:
求助啊!我写的激励代码不知道出什么bug了。在quartus编译成功。在modelsim编译成功,但加载波形,点了run之后就卡住。换了别人电脑也一样。其中:sw1,sw2是读写按键。在iic代码里面按下低电平有效。
大家帮忙看看是哪里出问题了。谢谢!
`timescale 1ns/100ps
module test;
reg clk,rst_n;
reg sw1,sw2;
reg sda_in;
wire sda;
iic_top iic1(
clk,rst_n,
sw1,sw2,
scl,sda,
sm_cs1_n,sm_cs2_n,sm_db
);
initial
begin
clk<=1'b0;
rst_n<=1'b0;
sw1<=1'b1;
sw2<=1'b1;
end
always
begin
#5 clk=~clk;
end
initial
begin
#1
rst_n<=1'b1;
sw1<=1'b0;
#1000
sw1<=1'b1;
sw2<=1'b0;
#2000
sw2<=1'b1;
#2000
$stop;
end
always begin
if(!sw2)
sda_in<= sda;
end
endmodule
大家帮忙看看是哪里出问题了。谢谢!
`timescale 1ns/100ps
module test;
reg clk,rst_n;
reg sw1,sw2;
reg sda_in;
wire sda;
iic_top iic1(
clk,rst_n,
sw1,sw2,
scl,sda,
sm_cs1_n,sm_cs2_n,sm_db
);
initial
begin
clk<=1'b0;
rst_n<=1'b0;
sw1<=1'b1;
sw2<=1'b1;
end
always
begin
#5 clk=~clk;
end
initial
begin
#1
rst_n<=1'b1;
sw1<=1'b0;
#1000
sw1<=1'b1;
sw2<=1'b0;
#2000
sw2<=1'b1;
#2000
$stop;
end
always begin
if(!sw2)
sda_in<= sda;
end
endmodule
这里面还有很多问题啊,有时候不报错并不一定是对的,你还得检查warning,看是不是一些有用的信号也被综合了。这里面,一是例化iic_top的时候语法错误,信号并没有连接上,例化连接信号是像这样 .xx (xxx),。
二是这里面信号没有全部激励,请问SCL是谁产生的?
这些问题很初级,希望在debug的时候能够找准方法。
scl是clk的2分频,错开一个相位方法是always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
scl=0;
else scl=~scl;
end
然后例化不是可以顺序连接端口么,不用.***(***)
我是想问问谁知道我仿真时卡住了。居然一点没动静。好歹有stop命令啊。
那你试试$finish。
Nothing happened/.....
`timescale ?
