参考内容:Verilog硬件描述语言 西安电子科技大学 蔡觉平等主讲 https://www.bilibili.com/video/BV1zb411s7bY?p=21
王建飞《你好FPGA一本可以听的书》
蔡觉平《Verilog HDL数字集成电路设计原理与应用》
正点原子《开拓者FPGA开发指南》
1、空白符:空格符(\b)、制表符(\t)、换行符和换页符
2、注释符:同C语言
3、标识符:被用来命名信号名、模块名、参数名等。可以由一组字母、数字、$符号、_(下划线)符号的组合。注意:标识符的字母区分大小写、第一个字符必须是字母或下划线。
4、关键字
5、数值:Verilog HDL共有四种逻辑数值状态。
状态 | 含义 |
0 | 低电平、逻辑0或“假” |
1 | 高电平、逻辑1或“真” |
x或X | 不确定或未知的逻辑状态 |
z或Z | 高阻态 |
整数的表示形式: +/-
例如:16'b1100_1100_0010_0000 8'hbx 8'b1001zzzz 用下划线区分增加可读性 没有数字说明位宽默认为32位
1、连线型:表示逻辑单元的物理连接,对应电路中的物理信号连线。最常用的是wire(连线)和tri(三态线)。
2、寄存器类型:reg是最常见的寄存器型数据类型,reg型是数据存储单元的抽象类型,其对应的硬件电路元件具有状态保持作用,能够存储数据,如触发器、锁存器等。reg型变量常用于行为级描述,由过程赋值语句对其进行赋值。
3、参数型(parameter):属于常量,在仿真开始之前就被赋值,在仿真过程中保持不变。
基本与C语言一致
Initial
begin
A<=B; //语句S1
B<=A; //语句S2
end
语句S1、S2没有先后顺序
Initial
begin
A=B; //语句S1
B=A; //语句S2
end
(1)if-else:条件分支语句
(2)case:分支控制语句
module pocky_led(
input clk,
input rst,
output reg [3:0] led
);
reg err;
reg [1:0] sel;
always @(posedge clk or negedge rst)begin // if-else 语句块
if(!rst)begin
led[1:0] <= 2'b00;
end
else if(err == 1'b1)
led[1:0] <= 2'b11;
else
led[1:0] <= 2'b10;
end
always @(posedge clk or negedge rst)begin // case 语句块
if(!rst)begin
led[3:2] <= 2'b00;
end
else begin
case(sel)
2'b00:led[3:2] <= 2'b00;
2'b01:led[3:2] <= 2'b01;
2'b10:led[3:2] <= 2'b10;
2'b11:led[3:2] <= 2'b11;
default:;
endcase
end
end
endmodule
数据流建模是比较简单的建模,基本语句是由assign关键词引导的。显示连续赋值语句如下:
;
assign #=Assignment expression;
上述格式中:
module example(a,b,m,n,c,y);
input[3:0] a,b,m,n;
output[3:0] c,y;
wire[3:0] a,b,m,n,c,y;
assign y = m|n;
assign #(3,2,4) c=a&b;
// wire[3:0] #(3,2,4) c=a&b; // 隐式连续赋值语句
endmodule
always过程语句 触发状态是一直存在的,只要满足always后面的敏感事件表,就执行语句块。
always @(<敏感事件列表>)
语句块
敏感事件列表就是触发条件,只有当触发条件满足时,后面的语句块才会被执行。当有两个或者两个以上的信号,他们之间可以用“or”连接,也可以用逗号“,”连接。敏感信号分为两种:一种为边沿敏感型,一种为电平敏感型。对于时序电路通常采用边沿敏感型。posedge和negedge两个关键字分别描述信号的上升沿和下降沿。例如
@(*) // 触发信号的省缺模式,使用时相当于assign
@(a) // 当信号a的值发生改变时
@(a or b) // 当信号a或者信号b的值发生改变时
@(posedge clock) // 当clock的上升沿到来时
@(negedge clock) // 当clock的下降沿到来时
@(posedge clock or negedge clock) // 当clk的上升沿或者reset信号的下降沿到来时
结构描述方式就是讲硬件电路描述成一个分级子模块系统,通过组成电泳这些子模块构成功能复杂的数字逻辑电路和系统的一种描述方式。