学习FPGA二 Verilog HDL硬件描述语言

Verilog HDL是1983年由GDA公司的Phil Moorby首创。

特点:1、支持多级建模方式:系统级;算法级;RTL级;门级;开关级;

2、支持多种建模方式:功能建模方式、结构建模方式、数据流建模方式

3、并发性,具有在同一时刻执行多任务的能力。

4、时序概念,硬件电路中有延时特性

5、……  6、……

HDL——Hareware description language

 

Verilog HDL程序基本结构

1、模块。module,它可以表示:物理块,如IC;逻辑块,如CPU中的ALU;甚至整个系统。每一个模块的描述都是从关键字module开始的,有一个名称,由关键字endmodule结束。一个完整的模块代码如下:
         module module_name ( input / output_port  list);

         Declarations:

            input/output_port   declarations;

            reg, wire, parameter, function, task, UDP&;

         Statements:

            initial statements

            always statements

            gate/module instantiation

            UDP instantiation

            assign  statements

          endmodule

module:  module  模块名(端口号1,端口号2,……);

Declarations:输入口:input            端口名1,……;

输出口:output            端口名1,……;

内部信号:reg[n-1:0] 变量1……; 

wire[n-1:0]  变量2……;

模块定义部分:这也是模块中最重要部分,例:二位比较器

module conpare (equal,a,b);

output equal;

input [1:0]a,b;

assign equal = (a==b)?1:0;

endmodule

 2、Verilog的描述方式,这里要举三个例子

数据流方式。通常描述组合功能,常用assign连续赋值语句来实现连续赋值(可以看出这种方式只能描述简单的那种组合电路)。

例:半加器的数据流描述

module HalfAdder (A, B, Sum, Carry);

input A,B;

output Sum,Carry;

  assign Sum = A^B;

  assign Carry = A&B;

endmodule

行为描述方式。

 常见的高级语言中的描述方式,具有很强的通用性和有效性。关键词是initial和always,其中前一个只能执行一次,而always可以无限循环执行。(这里可以看出这种方法的好处是容易理解,不过效率较低)还是半加器例子:

module HalfAdder (A, B, Sum, Carry);

input A,B;

output Sum,Carry;

  always@ (A or B) begin

  Sum = A^B;

  Carry = A&B;

end

endmodule

结构描述方式。通过实例进行描述,通过将Verilog预定义的基本单元实例引用到语言中,一旦实例的输入中任何一个发生变化,便重新运算并输出。(可以看出这种方式的优点是连接关系清晰,电路模块清晰,但是较难理解)例:四位寄存器的结构描述

module REG4 (d, clk, clr, q, qb);

output [3:0] q, qb;

input [3:0] d;

input clk,clr;

DFF d0 (d[0], clk, clr, q[0], qb[0]);

DFF d1 (d[1], clk, clr, q[1], qb[1]);

DFF d2 (d[2], clk, clr, q[2], qb[2]);

DFF d3 (d[3], clk, clr, q[3], qb[3]);

endmodule

 

以上的三种方式各有优劣,所以说常常在程序中混合使用。 例:全加器

module F_adder (A, B, Cin, Sum, Cout);

input A,B,Cin;

output Sum,Cout;

reg Cout;

reg T1,T2,T3;

wire S1;

  always@(A or B or Cin) begin

   T1 = A&Cin;

   T2 = B&Cin;

   T3 = A&B;

   Cout = (T1 | T2) | T3;

  end

assign Sum = S1 ^ Cin;

endmodule

对于上面这段程序,全加器,输入为A,B,进位位为Cin,输出位Sum,输出进位位Cout。将A,B,Cin三个输入的全部情况列出来比较来看,可以得出当这三个中有任意两个或者是两个以上为1是则进位Cout则为1,固有always块中对A,B,Cin的处理。然后就是Sum就是A^B^Cin。

明天接着写^_^

接上文:

Verilog的逻辑系统。Verilog采用四值逻辑系统:0,1,x,z。

0——低电平,false,logic low,接地,VSS、负信号

1——高电平,true,logic high,电源、VCC,正信号

x——未知状态,通常是信号处于不确定状态或者是发生冲突是用“x”表示

z——高阻态,三态门或驱动电路中经常出现这种状态

Verilog的数据类型

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值