赞
踩
目录
正文
verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
Verilog是一种硬件描述语言,作用是进行电路设计,可以描述电路的功能、连接和时序。他关心的不仅是从功能逻辑这个问题如何解决,更关心这些功能如何实现,关心最终的电气连接。可综合的Verilog代码经过综合后,最终会转化为实际电路。
C语言是一种软件描述语言,作用是通过算法逻辑实现某个功能。他不关心电路如何实现,只关心要解决这个问题,我应该使用什么功能,如何使用这些功能。C语言经过编译后,最终转化为二进制码实现。
注:c语言一定是串行执行程序
verilog可实现并行执行
0--low (低电平)
1--high (高电平)
x--unknown (未知)
z-high impedance (高阻态)
module | endmodule | input | output | inout |
wire | reg | parameter | always | assign |
if | else | begin | end | case |
endcase | posedge | negedge | or | default |
module 与 endmodule
module 与 endmodule 成对使用。模块是verilog 设计中基本功能模块。整个模块是由module开头,endmodule结尾,module后紧跟模块名
实例如下
- module selector(x,y);
-
- ...
-
- endmodule
注:模块名必须和项目名保持一直,否则会引起错误
input,output,inout
用于端口定义
input --- 输入端口
output ---输出端口
inout---可输入可输出端口
实例如下
- module selector(x,y,z);
-
- input x;
-
- output y;
-
- inout z;
-
- ...
-
- endmodule
assign(连续赋值)相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。
实例如下
-
- module selector(a,b,key,led);
-
- input a;
- input b;
- input key;
- output led;
-
- assign led=(key==0)?a:b;
-
- endmodule
always(过程赋值)
三种赋值方式
1、always语句有两种触发方式。第一种是电平触发,例如always @(a or b or c),a、b、c均为变量,当其中一个发生变化时,下方的语句将被执行。
2、第二种是沿触发,例如always @(posedge clk or negedge rstn),即当时钟处在上升沿或下降沿时,语句被执行。
3、而对于always@(*),意思是以上两种触发方式都包含在内,任意一种发生变化都会触发该语句。
用于声明数据类型
wire型数据常用来表示以assign关键字指定的组合逻辑信号,模块的输入输出端口类型都默认为wire型,wire相当于物理连线,默认初始值是z。
reg型表示的寄存器类型,用于always模块内被赋值的信号,必须定义为reg型,代表触发器,常用于时序逻辑电路,reg相当于存储单元,默认初始值是x。
wire与reg的区别
wire指的是直接运行,没有等待周期,跟导线一样
对于reg
如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;
如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;
如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。
一个Verilog case语句以case关键字开始,以endcase关键字结束。在括弧内的表达式将被精确地评估一次,并按其编写顺序与备选方案列表进行比较,与给定表达式匹配的备选方案的语句将被执行。一块多条语句必须分组,并在 begin 和 end 范围内。
实例如下
- case(表达式)
- 分支表达式1: 语句1;
- 分支表达式2: 语句2;
- 分支表达式3: 语句3;
- 分支表达式4: 语句4;
- 分支表达式5: 语句5;
- default: 语句6;
- endcase
-
begin···end语句的作用只是相当于函数的花括号
posedge---上升沿触发
negedge---下降沿触发
格式 <size>'<base format><number>
size example : 3'b010 ----- 3位的二进制数
unsize example : 123 ------ 默认为32为的10进制
未指定<base format> 则默认为32位的10进制
未指定<size> 则默认位32位宽
常用数值表达方式
-10进制 ('d or 'D)16'd255 -----16位10进制数
-16进制 ('h or 'H)8'h9a ----- 8位16进制数
-2进制 ('b or 'B) 'b1010 ---- 32位2进制数
-8进制 ('o or 'O) 'o21 ---- 32位8进制数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。