verilog问题 为下面的代码 写个测试信号(.vt文件) 用于modelsim仿真 (急用)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog问题 为下面的代码 写个测试信号(.vt文件) 用于modelsim仿真 (急用)相关的知识,希望对你有一定的参考价值。

//移位寄存器代码
module shift(clk,din,dout);input clk,din;output dout;reg [3:0] rdata;assign dout=rdata[3];always@(posedge clk) rdata <=rdata[2:0],din;endmodule

参考技术A `timescale 1 ns/ 1 ps

module shift_tb;

reg clk;
reg din;
wire dout;

parameter Period = 10;

shift u1 (
.clk(clk),
.din(din),
.dout(dout)
);

initial
begin
clk = 0;
din = 1'b0; // 初始化输入din
rst = 0; // 低电平复位
#100
rst = 1; // 复位结束
end

always #(Period/2) clk <= ~clk; // clk为10ns

always @(posedge clk)
begin
din <= $random % 2; // 产生0和1的随机数,用来做随机输入值
end

endmodule

建立.v文件,文件名为 shift_tb.v ,这个就是仿真文件。追问

需要用modelsim得出仿真波形哦,不是在.vt文件写测试代码吗?你这个怎么运行处波形呢?求指导下!

追答

.vt只是Q II的自生产的modelsim仿真文件而已,用.v是一样的,只要是激励模块就行了。
运行很简单啊,在modelsim里面添加shift_tb.v 和shift.v,然后编译,点击shift_tb.v这个文件进行仿真即可出波形了。还有发现你模块没有rst信号,
rst = 0; #100 rst = 1;
这三句话删掉吧,不过还是建议你用rst,并且给rdata一个初始化值。
最简单的方法就是在Q II里面设置shift_tb.v为testbench文件,还不懂的话,给你上图吧~

参考技术B 输入信号:
`timescale 1ns/1ns
module shiftsig(sclk,dout);
out sclk;
output dout;
reg sclk;
reg dout;
reg [3:0] data;
initial
begin
sclk=0;
dout=0;
data=0;
end
always #50
begin
sclk=~sclk;
data=data+1;
dout=data[3];
end

endmodule
测试top模块
`timescale 1ns/1ns
module shift_top;
wire clock,datain;
wire [3:0] dataout;
shiftsig(.clk(clock),.dout(datain));
shift t1(.clk(clock),.din(datain),.dout(dataout));
endmodule追问

不会用~~~~(>_<)~~~~

verilog仿真的时钟问题

`timescale 1 us/ 1 us

parameter PERIOD = 4;

always
begin
语句1:clock<=#(PERIOD/2) ~clock;
语句2:#(PERIOD/2) clock<= ~clock;
end
请问,语句1和语句2有什么区别么?
请不要告诉我没有区别!因为我用modelsim仿真的时候,使用语句2就正确。而是用语句1导致memory space不足。。。
我是4G内存,仿真个100us,不可能不足吧。。。
求高手指点。。。

语句1的意思是在A时刻计算等号右边的值,再在A+PERIOD/2赋值给目标变量,语句2则是在A+PERIOD/2时刻计算右边的值并赋值给变量。比如C= #10 A+B;是在0时刻计算A+B的值,后在10时刻更新C的值为A+B,而“#10 C=A+B”是在10时刻计算A+B的值并更新至C;两个语句本身都没有问题,造成报错的原因可能是其他语句里有冲突。追问

其它语句的确没问题,我只修改了这一个地方,直接就把内存跑爆了,仿真一个128字节的RAM而已,内存没这么容易爆吧?我之前50M的时钟跑了40多分钟,电脑都没问题。。。
这次一个笔误将这个延时放在语句内延时,作为时钟信号,果断内存爆了。。。

参考技术A 提示这种错误应该不是语句的问题,而且你只仿真100us,不会超出此范围的 参考技术B 。。 参考技术C 建议你把所有us 改成ns,试试

以上是关于verilog问题 为下面的代码 写个测试信号(.vt文件) 用于modelsim仿真 (急用)的主要内容,如果未能解决你的问题,请参考以下文章

verilog行为仿真时钟激励显示总是z

verilog 实现一个时钟

verilog 初始化十进制数组

怎样用verilog编写fpga的vga显示

verilog仿真的时钟问题

verilog中如何调用fifo做50个信号延迟