FPGA的学习之verilog HDL

verilog HDL硬件描述语言

建模方式:行为描述——过程化结构建模;数据流描述——连续赋值语句方式建模;结构花方式——采用门和模块实例语句描述建模。三种可以混合使用。

数据类型:线网型wire——表示构件间的物理连线;寄存器型reg——表示抽象的数据存储元件。

mudule AOI(a,b,c,d,f);//模块名AOI(端口列表a,b,c,d,f)
        input  a,b,c,d;//输入端口a,b,c,d
		output f;//输入端口f
		wire a,b,c,d;//定义信号类型
		assign f=~(a&b)|(c&d);//逻辑功能描述:数据流描述
endmodule
module<模块名>(端口列表);
      端口说明(input,output,inout)
      参数定义
      连续赋值语句assign
      过程块(initial和always)
          行为描述语句
          底层模块实例化
          任务和函数
      延时说明块
endmodule

  端口就是硬件的管角pin,端口没有定义类型,则默认为wire。

常量  程序运行时不能改变的量成为常量

1.整数   <size>'<base><value> size:大小,没有定义则默认32位;base:基数,可为2(b),8(o),10(d),16(h)进制。value:有效数值。例子:8‘b10101101//位宽8的二进制数

2实数:8.5     14e-4=0.0014  1.6e3=1600

变量  程序运行时可以改变的量成为变量

1.wire 常用来表示assig关键字指定的组合逻辑信号。

wire a;//定义了一位的wire型的数据
wire[7:0] b;//定义了8位的wire数据b
wire[3:0]c,d;//定义了两个4位的数据

2.reg型  常用来便是always模块指定信号,常代表触发器。通常,在设计中要由always块通过使用行为描述语句来表达逻辑关系。在always块内被赋值的每一个信号都必须定义为reg型。reg型只表示被定义的信号将用在always快内。

3.标识符 字母和下划线开头,后面可以是字母、数字、下划线和$。

赋值语句

1.连续赋值语句

assign 1.只要在右端的表达式的操作数上有事件(事件为值得变化)发生时,表达式即被计算;

            2.如果计算的结果值有变化,新结果就被赋给左边的线网。

2.过程赋值语句

  1.   仅在intial语句和always语句内赋值。
  2. 只能对reg型的变量赋值。右端可以是任何表达式。
  3. 阻塞赋值和非阻塞赋值两种。
Done = #5 1'b1;//通过延时,右端的值赋给左边被延迟。
#5 Done=1'b1;//语句执行完,被延迟,之后在向下执行。

阻塞赋值是顺序执行,而非阻塞是并行,即同时执行。

always语句 always +时序控制+执行表达式

always@(敏感变量or posedge 信号 or negedge 信号)

always #10 clk=~clk;

一个模块中可以有多个always语句块,他们彼此并行执行。

块语句

begin和end之间是顺序执行。fork和join之间是并行块语句。

猜你喜欢

转载自blog.csdn.net/T_J_S/article/details/83186410
HDL