Robei实例入手
目录
通过几个比较简单的实例,简要介绍一下 Robei 软件的模型建立、端口属性修改、代码输入以及仿真和波形查看的过程。同时也可以通过代码的设计巩固一下对 Verilog语言应用的熟练程度。对于Robei的安装相关,可参考:
Robei安装注册&使用说明.
一、逻辑门设计
逻辑门是数字电路的基础,常见的数字电路逻辑门有与门,或门,非门,与非门,或非门和异或门
等。
与门示意图:
真值表:
a | b | y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
1、模型设计
新建一个模型。点击工具栏上的 图标,或者点击菜单“File”然后在下拉菜单中选择“New”,
对话框中设置你所设计的模型
- Module Name:模块名称
- Module Type:模块类型,Robei 目前支持 3 种类型,“module”,“testbench”和“constrain”。
- Language:设计语言,这里只有一种设计语言 Verilog。
- Input Ports:输入引脚数目
- Output Ports:输出引脚数目
- Inout Ports:既可以作为输入又可以作为输出引脚的数目
参数填写完成后点击“OK”按钮,Robei 就会生成一个新的模块,名字就是 andgate
如图
修改模型
p0—>a;
p1—>b;
p2—>y;
看图操作
修改后模型如图
输入算法
点击模型下方的code进入代码设计区
在代码设计区输入如下代码(该代码实现与门逻辑运算
)
assign y = a & b;
保存,点击如图所示图标(或file下拉saveas)
注意:
1.保存的路径中不能含有中文和空格
2. 保存文件名不能以数字和特殊字符开头
3. 相关的文件要保存在同一路径下
4. 保存的文件名会显示成当前设计的模块名称
5. 命名时不能命名成 verilog 的关键字,如“module”,“if” 等
编译,点击如示图标(或者build下拉的compile)执行代码检查
如果有错误,会在输出窗口中显示,错误行数在 code 中显示的行中,可以通过修改该行或者上下行,错误行数不在 code 显示的范围中,需要修改界面。如果没有错误提示,恭喜你,模型 andgate 设计完成。
编译结果
2、测试文件设计
新建一个文件夹,在弹出的对话框中进行设计
注意:如果 Module Type 不设置成 testbench,仿真将看不到波形。
设置如图
点击OK后如图
可自定义引脚颜色
另存为测试文件,点击如示图标(注意保存于对应模型文件夹下)
保存
注意:
1.保存的路径中不能含有中文和空格
2. 保存文件名不能以数字和特殊字符开头
3. 必须保存到和 andgate 同一路径下,否则 Toolbox 中找不到 andgate 模块
4. 保存的文件名会显示成当前设计的模块名称
加入模型。在 Toolbox 工具箱的 Current 栏里,会出现一个 andgate 模型,单击该模型并在 andtest 上添加。
连接引脚,点击如示图标(或菜单“Tool”中的“Connect”)
p0—>a;
p1—>b;
p2—>y;
如果鼠标要变回选择模式,点击图标
输入激励。点击测试模块下方的“Code”,输入激励算法。激励代码在结束的时候要用$finish 结束。
initial begin
p0 = 0;
p1 = 0;
#1
p0 = 1;
#1
p1 = 1;
#1
p0 = 0;
#1
p1 = 0;
#1
$finish;
end
执行仿真并查看波形
点击如示图标,查看输出信息
检测没有错误后点击如示图标进行仿真
再点击如示图标(或菜单“View”中的“Waveview”)查看波形
点击右侧 Workspace 中的信号,进行添加并查看。
点击波形查看器如示图标可以进行自动缩放
分析仿真结果并对照真值表,查看设计是否正确。
二、自动售饮料机
1、设计原理
自动售货机的信号定义:clk:时钟输入;reset:系统复位信号;half_dollar:代表投入5 角硬币;one_dollar:代表投入 1 元硬币;half_out:表示找零信号;dispense:表示机器售出一瓶饮料。
当 reset=0 时,售货机处于工作状态,此时连续往售货机中投硬币(可以是 5 角也可以是一元),投入最后一枚硬币时,如果之前投入的硬币总和为 2.5 元,则可以取走一瓶饮料,如果少于 2.5 元则继续投币,如果为 3 元则显示可以取出一瓶饮料,而且找零显示信号为高电平。
投入硬币的总额 | 自动售饮料机给出的信号 |
---|---|
<2.5元 | 继续投币 |
=2.5元 | 可以取出一瓶饮料 |
=3元 | 可以取出一瓶饮料,并且找零 |
2、sell模块的设计
新建一个模型名为sell,类型为module,同时具备4个输入和2个输出,每个引脚的名称和属性参照如下进行修改
创建模块如图:
点击模型下方的code,添加如下代码
parameter idle=0,half=1,one=2,one_half=3,two=4;
reg[2:0] D;
always @(posedge clk)
begin
if(rst)
begin
dispense=0;
half_out=0;
D=idle;
end
case(D)
idle:
if(half_dollar)
D=half;
else if(one_dollar)
D=one;
half:
if(half_dollar)
D=one;
else if(one_dollar)
D=one_half;
one:
if(half_dollar)
D=one_half;
else if(one_dollar)
D=two;
one_half:
if(half_dollar)
D=two;
else if(one_dollar)
begin
dispense=1;
D=idle;
end
two:
if(half_dollar)
begin
dispense=1;
D=idle;
end
else if(one_dollar)
begin
dispense=1;
half_out=1;
D=idle;
end
endcase
end
保存模型到一个文件夹(文件夹路径不能有空格和中文)中,编译并检查有无错误。
3、sell_test测试文件设计
新建一个具有 4 个输入 2 个输出的 sell_test 测试文件,记得将 Module Type 设置为“testbench”,各个引脚配置如图
另存为测试文件,将测试文件保存到上面创建的模型所在的文件夹下
加入模型。在 Toolbox 工具箱的 Current 栏里会出现模型,单击该模型并在 sell_test 上添加,并连接引脚
输入激励。点击测试模块下方的“Code”,输入激励算法。激励代码在结束的时候要用$finish 结束
initial begin
one_dollar=0;
half_dollar=0;
rst=1;
clk=0;
#100 rst=0;
repeat(2)@(posedge clk);
#2 one_dollar=1;
repeat(1)@(posedge clk);
#2 one_dollar=0;
repeat(2)@(posedge clk);
#2 one_dollar=1;
repeat(1)@(posedge clk);
#2 one_dollar=0;
repeat(2)@(posedge clk);
#2 one_dollar=1;
repeat(1)@(posedge clk);
#2 one_dollar=0;
#20 rst=1;
#100 rst=0;
repeat(2)@(posedge clk);
#2 one_dollar=1;
repeat(1)@(posedge clk);
#2 one_dollar=0;
repeat(2)@(posedge clk);
#2 one_dollar=1;
repeat(1)@(posedge clk);
#2 one_dollar=0;
repeat(2)@(posedge clk);
#2 half_dollar=1;
repeat(1)@(posedge clk);
#2 half_dollar=0;
#20 rst=1;
#5 $finish;
end
always #10 clk=~clk;
执行仿真并查看波形。查看输出信息。
检查没有错误之后查看波形。点击右侧 Workspace 中的信号,进行添加并查看分析仿真结果。
4、sell_constrain 约束文件设计
新建一个模块,命名为 sell_constrain,模块类型选择为 constrain,具有 4 个输入和 2个输出,如图
将约束模块和设计的 sell 模块保存到同一个目录下,用鼠标左键单击把 sell 模块从左侧的 ToolBox 添加到约束模块中;
修改约束模块的端口名称
clk 对应开发板的拨码开关 T16;
reset 对应开发板的拨码开关 W13;
one_dollar 对应开发板的拨码开关 G15;
half_dollar 对应开发板的拨码开关 P15;
dispense 对应开发板 LED 灯 M14;
half_out 对应开发板 LED 灯 M15;
保存并执行,如果软件显示“Generate constrain file complete”,说明约束文件已经成功生成。
5、VIVADO 设计平台进行后端设计
启动 Vivado 软件并选择设备 XC7Z010CLG400-1 作为硬件对象,设计语言选用 Verilog,建立新的工程,添加通过 Robei 设计的文件 sell.v。
(1)打开 Vivado,选择开始>所有程序>Xilinx Design Tools> Vivado2013.4> Vivado2013.4;
(2)单击创建新项目 Create New Project 启动向导。你将看到创建一个新的 Vivado 项目对话框,单击 Next;
(3)在弹出的对话框中输入工程名 sell 及工程保存的位置,并确保 Create project subdirectory复选框被选中,单击 Next;
(4)选择项目类型表单的 RTL Project 选项,不勾选 Do not specify sources at this time 复选框,然后单击 Next;
(5)使用下拉按钮,选中 Verilog 作为目标文件和仿真语言;
(6)点击添加 Add Files 按钮,浏览到刚刚我们 Robei 项目的目录下打开 Verilog 文件夹,选择 sell.v,单击 Open,然后单击 Next 去添加现有的 IP 模型;
(7)由于我们没有任何的 IP 添加,跳过这一步,单击 Next 去添加约束形成;
(8)点击添加 Add Files 按钮,浏览到设计的 sell 模块目录下的 constrain 文件夹,选中其中的 sell_constrain.xdc 文件,然后单击 Next;
(9)在默认窗口中,按照图 5-1-13 所示设置 Filter 中的选项,然后在 Parts 中选择XC7Z010CLG400-1,单击 Next;
(10)单击 Finish,本 Vivado 项目创建成功。
设计添加好的约束文件
器件选择
打开 sell_constrain.xdc 文件,查看引脚约束源代码。
(1)在资源窗口 sources 中,展开约束文件夹,如图 3-2-14,然后双击打开 sell_constrain.xdc进入文本编辑模式;
(2)Xilinx 设计约束文件分配 FPGA 位于主板上的开关和指示灯的物理 IO 地址,这些信息可以通过主板的原理图或电路板的用户手册来获得。
确保正确进行,添加如下代码
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
完整的约束代码
#This file is generated by Robei!
#Pin Assignment for Xilinx FPGA with Software Vivado.
set_property PACKAGE_PIN T16 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property PACKAGE_PIN W13 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports rst]
set_property PACKAGE_PIN G15 [get_ports one_dollar]
set_property IOSTANDARD LVCMOS33 [get_ports one_dollar]
set_property PACKAGE_PIN P15 [get_ports half_dollar]
set_property IOSTANDARD LVCMOS33 [get_ports half_dollar]
set_property PACKAGE_PIN M15 [get_ports half_out]
set_property IOSTANDARD LVCMOS33 [get_ports half_out]
set_property PACKAGE_PIN M14 [get_ports dispense]
set_property IOSTANDARD LVCMOS33 [get_ports dispense]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
(3)点击 File->Save File 保存文件
** 使用 Vivado 综合工具来综合设计,并进行 Implementation 任务实现。**
(1)单击综合任务下拉菜单中的 Run Synthesis,综合过程将分析 sell.v 文件并生成网表文件。当综合过程完成了,且没有错误信息,将会弹出带有三个选项的完成对话框;
(2)如果有错误,根据错误信息提示修改,直至综合没有错误。然后选择 Run Implementation选项,执行任务实现,然后单击 OK; (3)任务实现过程将在综合后的设计上运行。当这个过程完成,且没有错误信息,将会弹出带有三个选项的任务实现完成对话框;
(4)如果有错误,根据错误信息提示修改,直至综合没有错误。
将开发板上的电源开关拨到 ON,生成比特流并打开硬件会话,对 FPGA 进行编程。
(1)确保微型 USB 电缆连接到 PROG UART 接口;
(2)确保 JP7 设置为 USB 提供电源;
(3)接通电源板上的开关;
(4)点击任务实现完成弹出的对话框中 Generate Bitstream 或者点击导航窗口中编程和调试任务中的 Generate Bitstream。比特流生成过程将在任务实现设计后运行。当完成比特流生成后会弹出有三个选项的完成对话框;
(5)这一过程将已经生成的 sell.bit 文件放在 sell.runs 目录下的 impl_1 目录下;
(6)选择打开硬件管理器 Open Hardware Manager 选项,然后单击确定。硬件管理器窗口将打开并显示“未连接”状态;
(7)点击 Open a new hardware target。如果之前已经配置过开发板你也可以点击最近打开目标链接 Open recent target;
(8)单击 Next 看 Vivado 自定义搜索引擎服务器名称的形式;
(9)单击 Next 以选择本地主机端口;
比特流生成
打开新的硬件目标
新的硬件指标检测
单击两次 Next,然后单击 Finish。未连接硬件会话状态更改为服务器名称并且器件被高亮显示,如图(未被编程)
选择器件,并验证 sell.bit 被选为常规选项卡中的程序文件
在器件上单击鼠标右键,选择 Program device 或单击窗口上方弹出的 Program device-> XC7z010_1 链接到目标 FPGA 器件进行编程;
单击确定对 FPGA 进行编程。开发板上 Done 指示灯亮时,器件编程结束;
通过控制拨动和按键开关的开闭来观察 LED(请参考前面的逻辑图)验证输出结果
6、开发板验证
首先,按住 reset (SW2)拨至高电平,再来回拨动 clk (SW3)1 到 2 次,进行复位操作;其次,设置不同的输入,这里分别进行了one_dollar (SW0),half_dollar (SW1)的验证。最后,按 clk 时钟键,经验证该自动贩卖机功能无误。
one_dollar 时 half_out 灯亮
half_dollar 时 half_out 灯不亮
三、总结与参考资料
1、总结
本篇文章主要是对软件Robei的一次简单使用实例操作,有关更多的实例,大家可见参考链接。
2、参考资料
实例六 自动售饮料机.
下面是“7天学好Robei”指导书网盘链接
https://pan.baidu.com/s/1uMXWhw99pLm7X75JicG5lQ.
提取码:k3g1