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

猜你喜欢

转载自blog.csdn.net/QWERTYzxw/article/details/115775185