02 开发流程(中)
AI summary
本文介绍了日本开发流程中的硬件代码生成bit文件的步骤,包括在Vivado中创建项目、添加源文件、生成bitstream以及将其烧写到实验板上。此外,简要介绍了硬件描述语言(HDL)及其与实际硬件的关系,重点讲解了SystemVerilog的基础语法,包括变量声明、常量、模块定义及运算符的使用。
Tags
Hardware Design
SystemVerilog
Vivado Workflow
数字逻辑与部件设计 实验部分-02.开发流程(中)
Convert code to circuit.
数字逻辑与部件设计 实验部分-02.开发流程(中)将已有的代码生成bit文件Step 0:在Vivado安装目录中添加实验板信息Step 1:新建项目Step 2:运行tcl脚本添加源文件Step 3:开启多线程(optional)Step 4:生成bitstreamStep 5:上板硬件描述语言简介硬件描述语言与实际硬件硬件描述语言与C语言SystemVerilog基础语法:二进制位变量声明常量接入电路系统:assign语句SystemVerilog基础语法:模块与元件模块的定义元件例化:模块接入电路系统更加简便的设计黑盒SystemVerilog基础语法:运算符
将已有的代码生成bit文件
我们已经学会了如何将bit文件载入实验板。现在,我们来学一下,有了硬件代码,如何生成bit文件。
Step 0:在Vivado安装目录中添加实验板信息
将
board_files.zip
的两个文件夹解压至 <VivadoInstallDir>/data/boards/board_files/
。解压后的目录应如图所示:
Step 1:新建项目
打开Vivado,点击
Create Project
,新建一个项目。选择项目路径后,点下一步选择
RTL Project
,然后一直点击下一步,直到 Default Part
这个界面:点击上方的
Boards
,选择 Nexys4 DDR
,然后一直点下一步,直到项目新建成功。Step 2:运行tcl脚本添加源文件
运行
source/
目录下的 sources.tcl
,一键添加所有需要的源文件。sources.tcl
的内容如下:以上提到了几种文件:
源文件
:模块设计文件。
顶层文件
:也属于源文件,作用是将已经写好的数字模块与实验板的引脚相连。
引脚约束文件
:实验板的配置文件。
仿真文件
和仿真顶层
:仿真用的测试文件。仿真的有关部分在下节课会讲。
这些tcl代码对应的操作都有图形化界面的操作对应。
Step 3:开启多线程(optional)
在
Tcl Console
中输入 set_param general.maxThreads 16
开启多线程模式,对接下来的Step 4有一定的加速效果。Step 4:生成bitstream
点击Vivado界面左下角的
Generate Bitstream
,然后一直选 Yes
,有默认框的就✔一下,减少今后操作的点击次数。有一步是确认用多少个job,这个对速度影响不大。
也可在
Tcl Console
中输入: reset_run synth_1; launch_runs impl_1 -to_step write_bitstream
Step 5:上板
点击左下角的
Open target
--> Auto Connect
--> Program Device
,把默认路径的bitstream(路径应包含 impl_1/
)烧写到实验板上。实验板的现象和上一节课提供的bit文件一样。
硬件描述语言简介
硬件描述语言(HDL,
Hardware Description Language
),顾名思义,是用来描述硬件的语言。硬件描述语言与实际硬件
我们画过很多电路图(那些电路就是硬件),但那些都是小规模的电路。我们需要借助计算机的力量去设计大规模电路,而硬件描述语言是我们和计算机通信的桥梁。
这就要求我们了解硬件描述语言与实际硬件之间的关系。
以下是助教的一些学习心得:
- 先有电路(图),再写HDL。
- 用基本元件生成新的部件。掌握新部件对应的HDL写法后,就可以把新部件当成基本元件来使用了。
硬件描述语言与C语言
我们将要学习的硬件描述语言SystemVerilog,其语法形式和我们已经学过的 C语言类似,但它们的本质完全不同。
有人说,硬件描述语言是并行语言,C语言是串行语言。这个说法是正确的,不过两者差别的内涵在于程序与电路的差别。
C语言经编译、链接后生成程序,而程序是由指令序列构成的。
而电路(硬件)是一个整体,以一个系统的方式运作着。
这是一个简单的并联电路。我们能硬改某个灯上通过的电流吗?我们只能改变元器件接入电路系统的方式。
SystemVerilog基础语法:二进制位
变量声明
在数字世界中,万物皆为0和1。在SystemVerilog中,万物皆为logic。
SV的变量命名规则与C语言类似,比如
避开关键字
、区分大小写
等。每句语句也以分号结尾。变量的实际意义是电路中的节点。
接下来是向量:
SV的向量和C的数组有以下几点不同:
- SV的向量在声明时需确定上下界。
logic [15:0]c;
和logic [0:15]c;
都是合法的,分别代表大端法和小端法。
logic [15:0]c;
和logic c[15:0];
都是合法的,但后者只能一位一位
地接入电路系统中。
- SV的多维数组没有C中的多维数组寻址模式。
其实,logic是四值逻辑:
0, 1, x, z
。x
和z
在真实的电路中不存在,仅在软件仿真时有用。常量
SV的常量形式为
位宽+单引号+数据进制+数据
。需注意:- 位宽代表常量有多少位二进制。位宽必须为常量。
- 数据进制为一个字符,常用的有二进制(b),十进制(d),十六进制(h)。
例:
接入电路系统:assign语句
将变量接入电路系统,有三种方式:
- assign语句
- 元件例化
- always语句(always_comb, always_ff, always_latch)
先介绍assign语句。
SV中,大括号
{}
代表位拼接。(代码段用begin end
)可以将新变量接入已知变量中:
大括号
{}
可以实现位扩展:SystemVerilog基础语法:模块与元件
模块是一个小型电路系统,是数字设计中很重要的一个思想。
模块的定义
模块定义的语法如下:
module
和endmodule
为模块定义的关键字ModuleName
为模块名。// ports
部分为输入输出接口的声明(一般只声明),会用到input
和output
关键字。// logics
部分为模块内部电路。以下为一个模块定义的例子:
元件例化:模块接入电路系统
元件例化有几种语法形式:
例:
有一些代码规范:
- 元件名、模块名和变量名的大小写关系
- 用哪种元件例化的语法形式
注:顶层模块通过约束文件接入实验板,没有例化。
更加简便的设计
模块设计和函数设计的初衷是类似的,把整体设计切成部分,简化设计步骤。
画电路图时,也可以把已经学过的电路元件放进电路图里。
黑盒
先定义接口,再想怎样设计
SystemVerilog基础语法:运算符
我们已经学了数字电路的基本元件与门、或门和非门。它们在SV中分别用
&
、|
、~
表示。&
和|
还有另一种用法:除了基本的逻辑门,SV还支持以下几种运算符:
SV中运算符所代表的电路都可用
assign
语句接入电路系统中。Loading...