文章目录
- 前言
- 一、设计文件编写
- 二、仿真文件编写
- 三、波形信号查看
- 总结
前言
上一期文章分享了testbench(激励)文件的编写,这期文章对上期文章的理论做一个实际上机操作。
一、设计文件编写
首先打开Robei EDA,点击加号,新建一个模块。输入模块名,还有引脚数量。
修改引脚名,定义引脚类型,输入设计代码。下面左边为设计输入代码,右边为完整代码。
完整设计代码:
module flow_led(
sys_clk,
sys_rst_n,
led);
//---Ports declearation: generated by Robei---
input sys_clk;
input sys_rst_n;
output [3:0] led;
wire sys_clk;
wire sys_rst_n;
reg [3:0] led;
//----Code starts here: integrated by Robei-----
//reg define
reg [23:0] counter;
//计数器对系统时钟计数,计时0.2秒(仿真时,设置为10)
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
counter <= 24'd0;
else if (counter < 24'd10)
counter <= counter + 1'b1;
else
counter <= 24'd0;
end
//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
led <= 4'b0001;
else if(counter == 24'd10)
led[3:0] <= { led[2:0],led[3]};
else
led <= led;
end
endmodule //flow_led
二、仿真文件编写
点击加号,新建一个testbench,输入模块名,还有引脚数量。
输入激励代码。这里需要注意的是,Robei 的模型有四种类型:“module”,“model”,“testbench” 和“constrain”。 如果你想仿真之后看波形应该将顶层的仿真模块类型设置成“testbench”。同时,testbench 的模块输入端口类型应为“reg”,输出类型应为“wire”。 还有记得在end前面输入$finish。
完整仿真代码:
`timescale 1ns/1ns
module flow_led_tb();
reg sys_clk;
reg sys_rst_n;
wire [3:0] led;
//----Code starts here: integrated by Robei-----
parameter T = 20;
initial begin
sys_clk = 1'b0;
sys_rst_n = 1'b0;
#10 sys_rst_n = 1'b1;
#10000 sys_rst_n = 1'b0;
$finish;
end
always #(T/2) sys_clk = ~sys_clk;
initial begin
$dumpfile ("D:/a/flow_led/flow_led_tb.vcd");
$dumpvars;
end
//---Module instantiation---
flow_led flow_led1(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.led(led));
endmodule //flow_led_tb
三、波形信号查看
注意:Robei EDA软件没有注册可以看仿真波形,但是,但是仿真的模块数目有限制。
总结
相比于Modelsim和vivado,robei的仿真方便了很多。因为本人能力有限,如果有错的地方,欢迎指正,谢谢。