Verilog
发表于|更新于|分类10 (FPGA)
Verilog模块结构
参考代码
module full_adder (A,B,CIN,S,COUT); |
位宽默认为1位,数据类型默认为wire型
内部信号声明格式:数据类型 位宽 信号名称 元素个数
wire和reg
-
wire类似于线,需要驱动,assign语句的合法左值
-
reg类似于寄存器,并且能够存储状态.always语句的合法左值
net和varible
- 如果是连续赋值或门原语赋值或例化语句赋值,则定义成net型;如果是过程赋值,则定义成varible型。
- 对于端口信号来说,input信号和inout信号必须定义成net型
$wire\rightarrow net,reg\rightarrow varible$
assign语句
assign语句被称为连续赋值语句
用法
assign 赋值目标 = 表达式
运算符
- 算术运算符(+,-,×,/,%)
- 赋值运算符(=,<=)
- 关系运算符(>,<,>=,<=)
- 逻辑运算符(&&,||,!)
- 条件运算符(?:)
- 位运算符(~,|,^,&,^~)
- 移位运算符(<<,>>)
- 拼接运算符({ })
异或运算符"^"也称XOR运算符。它的规则是若参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。即 0∧0=0,0∧1=1, 1^0=1,1∧1=0。比如:01111010,想使其低4位翻转,即1变为0,0变为1。可以将它与00001111进行∧运算。
always语句
always语句被称为过程块
用法
alwyas @(敏感信号条件表),敏感条件有两种,一种是边沿敏感,一种是电平敏感
阻塞与非阻塞赋值
- 阻塞赋值(=):在赋值时,先计算等号右手部分的值,再赋值给左边变量,直到该语句赋值完成,后面的语句才能执行,会阻塞后面的语句。(顺序执行)
- 非阻塞赋值(<=):执行赋值语句右边,然后将begin-end之间的所有赋值语句同时赋值到赋值语句的左边,但是左边的变量的值不会立即更新,直到always块所有语句执行完,才将左边变量的值更新。
底层模块调用
参考代码
module DFF(CLK,D,Q) |
module examp (clk,d,a,q) |
命名方法
- 端口名关联法(命名法)
- 位置关联法(顺序法)
门原语
门原语调用格式:门原语名 实例名
参考代码
and(out, in1, in2); |
and(与) | or(或) | xor(异或) |
---|---|---|
nand(与非) | nor(或非) | xnor(同或) |
数字表达格式
格式:位宽 ’ 基数 常量
基数:二进制(b/B)、十进制(d/D)、八进制(o/O)、十六进制(h/H)
文章作者: Jamth
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jamth!