第四章 硬件描述语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
in ctrl bufif1 in ctrl bufif0 out out in ctrl notif1 out
in ctrl notif0
out
三态门端口列表中最后一个信号被识别 为控制信号,倒数第二个被识别为输入, 其余为输出信号。 三态门实例: 缓冲器三态门bufif1 b1(out,in,ctrl); bufif0 b0(out,in,ctrl); 三态反相器:notif1 n1(out,in,ctrl); notif0 n0(out,in,ctrl);
4、1 verilog的基本概念
• 通过半加器介绍 通过半加器介绍verilog的一些基本概念。 的一些基本概念。 的一些基本概念 • 下表为半加器的真值表: 下表为半加器的真值表
半加器的逻辑的表达式为 sum=a’·b+a·b’ c_out=a·b module half_adder(a,b,sum,c_out); input a,b;//端口模式声明部分 output sum,c_out;//端口模式声明部分 wire a,b; wire sum,c_out; wire temp0,temp1;//内部信号声明 assign temp0=(~a&b);//连续赋值语句 assign temp1=a&(~b); assign sum=temp0|temp1; assign c_out=a&b; endmodule
4、2基本词法规定
• 标识符 标识符:由字母、数字、下划线、美元符号组成,首 字母必须是字母或下划线。 • 关键字 关键字:如module,endmodule等,关键字全部为小 写。 • 注释 注释:单行注释以//开始,到行末,多行注释一/*开 始以*/结束。 • 数值表示 数值表示:包括指明位宽的数字和不指明位宽的数字。 指明位宽的数字表示形式 为:<size>’<baseformat><number> 如4’b1001。 如果没有指定基数,则默认十进制数,如果没有指 定位宽,则默认位宽与计算机有关
• 数组 数组:在verilog HDL中允许声明reg以及wire 类型向量以及标量的数组。线网数组也可 以用于连接实例的端口,数组中每个元素 可以作为变量或变量使用。例:
reg count[0:7]//由8个变量组成的数组; reg bool[31:0]//由32个寄存器标量组成,数组 的每个元素为1位宽的寄存器类型变量; reg[4:0]port_id[0:7]//由8个5位宽的向量组成的 数组,数组的每个元素为5位宽变量; wire[7:0]w_array[5:0]//由8个寄存器向量组成, 数组共有6个元素。
input1 input2 设计模块 (半加器 半加器) 半加器 测试激励模块 q
另一种使用激励的模式是在一个虚拟的底层模 块中实例引用激励块和设计块。激励块和设计块 之间通过接口进行交互。如图:
顶层模块
a b
a b
半加器 激励块 sum cout sum cout
• 以下例题为半加器电路一个testbench,及 其仿真结果: • 组合逻辑testbench
• • • • • • • • • • • • •
• 端口声明 端口声明:包括端口信号的模式声明(说 明端口信号的信息流动方向)和数据类型。 如:input a,b//端口模式声明,wire a,b//端口 数据类型声明。
• 程序主体
• verilog HDL程序主体中有三种语法结构(连续赋值 语句、模块实例、always块). • 1、连续赋值语句 连续赋值语句:主要用来实现简单的组合逻辑 连续赋值语句 电路。语法如下:assign signal_name=expression。 以关键字assign作为开始,=左边表示组合逻辑的 输出,右侧的表示组合逻辑输入,如:assign temp=(~a)&b;连续赋值语句并行执行,语句顺序 不会影响仿真及综合结果。
• 向量 向量:线网和寄存器类型的变量可以声明 为向量(位宽大于一),如果声明中没有 指定位宽,则默认为标量。 reg[n-1:0] busA//n位宽寄存器变量; 向量通过[low:high]或[high:low]说明,左 边数总是代表向量的最高有效位,此例中 最高有效为第n-1位。
1、向量域选择 向量域选择:可以指定某一位或若干相邻位,如 向量域选择 busA[2:0]//向量的后三位。
Biblioteka Baidu
• verilogHDL程序的主体只能包含 种语法结 程序的主体只能包含3种语法结 程序的主体只能包含 连续赋值语句(2)模块实例 构:(1)连续赋值语句 模块实例 连续赋值语句 模块实例;(3)always块。 块
连续赋值语句主要用来实现简单的组合逻辑电 路。以关键字assign作为开始,=左边表示组合逻 辑的输出,右侧的表示组合逻辑输入,如:assign temp=(~a)&b; 连续赋值语句并行执行,语句顺序不会影响 仿真及综合结果。
• 通过全加器介绍verilog层次化设计思想:
a b cin
temp0
半加 器m1
co temp1 temp2 半加器 m2 sum
• 例:module full_adder_ str( input wire a,b,cin, output sum,co ); wire temp0,temp1,temp2; half_adder_beh1 m1(.a(a),.b(b),.sum(temp0),.c_out(temp1));//半加 器模块实例; half_adder_beh1 m2(.a(cin),.b(temp1),.sum(sum),.c_out(temp2)); my_or m3(co,temp2,temp1); endmodule
• 2、模块实例 模块实例:通过高层次模块中实例化预先定义 模块实例 的低层次模块,实现层次化。 模块实例的语法: module_name instance –name ( .formal _signal1(actual_name), …… ); module_name表示被实例模块的名字,instance_name 叫做实例名。 • 3、always块:可用于比较复杂的组合逻辑电路和时 块 序电路。always块内部可以有三种语法结构:①过 程赋值语句②if语句③case语句。
第四章 硬件描述语言
• 学习目标: 1、掌握verilog的基本概念。 2、verilog的程序框架及结构。 3、verilog的仿真。 3 verilog
第四章 verilog硬件描述语言
4、1 、 4、2 、 4、3 、 4、4 、 4、5 、 4、6 、 4、7 、 verilog的一些基本概念 的一些基本概念 基本词法规定 数据类型 程序框架 结构描述 门级描述 testbench
4、6门级描述
• 逻辑门是数字电路最基本的逻辑原件 • verilog HDL支持四类逻辑原语:多输入门、多输出 门、三态门以及pull gates,前三类为常见逻辑门。 • 多输入逻辑门:与门、与非门、或门、或非门、 异或门、同或门。
and or xor
nand
nor
xnor
多输入门的 端口列表的第一个信号被识别为 输出,其余为输入。 如and(out,in1,in2).//模块实 例时可以省略实例名。
4、5结构描述
• 数字电路设计有两种基本设计方法:自顶 向下和自底向上。 • 自顶向下设计将整个计划分为接口清晰、 关系明确的子系统,如果有些子系统仍然 比较复杂,则对该子系统继续划分,直至 足够简单。 • 自底而上设计首先对现有的功能进行分析, 然后使用这些模块搭建大一些的功能块, 如此继续到顶层模块。
……
• 采用门级原语实现全加器电路: module fulladd (output sum,c_out, input a,b,c_in a s1 ); b wire s1,c1,c2; c1 xor(s1,a,b); and(c1,a,b); xor(sum,s1,c_in); cin and(c2,s1,c_in); xor(c_out,c1,s2); endmodule
• 门阵列实例:verilog HDL中可以采用门阵列 的方式实例逻辑门。 如:wire [7:0]out,in1,in2; nand n_gate[7:0](out,in1,in2); 等价于nand n_gate0(out[0],in1[0],in2[0]); nand n_gate7(out[7],in1[7],in2[7]);
• 多输出逻辑门:
not buf
缓冲器和非门端口列表最后一个信号为输入, 其余为输出。如buf b1(out1,out2,in).//模块实例时 不可以省略实例名。
• 三态门:verilog HDL支持4种三态 门:bufif1,bufif0,notif1,notif0.只有控制信号 有效,三态门才能传递数据,否则输出为 高阻。 • 三态门的逻辑符号如图所示:
2、可变的向量域选择:[<starting_bit>+:width]: 或[<starting_bit>-:width]: 例:reg[255:0]data;//data[255]是最高有效位 byte=data[31-:8];//第31位算起位宽为 8,data[31:24] byte=data[24+:8];相当于data[31:24]
4、4程序框架
• HDL模块包括模块定义、端口声明、程序主体 模块包括模块定义、 模块包括模块定义 端口声明、程序主体。 • 模块:verilog HDL的 基本设计单元是模块。模块 模块 以关键字module开始,其后的括号内内容为端 口列表,给出了模块与外界互联的I/0接口,最 后关键字endmodule结束。模块主体部分只能包 含三种类型语法结构:连续赋值语句(assign)、 模块实例、过程赋值语句(always块)。
sum
s2 cout
4、7 testbench
• 仿真逻辑的构成。 设计完成后通常通过仿真验证设计功能的正确性。 仿真时对设计模块施加激励信号,通过检查其输 出信号是否满足预期来验证设计的正确性。称完 成测试功能的模块为激励块。 激励块的设计有两种模式:一种是在激励块中直 接引用设计模块并直接驱动;如图。
• • • • module halfadder; reg test_in0,test_in1; wire test_out1,test_out2; half_adder(.a(test_in0),.b(test_in1),.sum(test_out1),. c_out(test_out2)); • initial
a 0 0 1 1 输入 b 0 1 0 1 输出 sum 0 1 1 0 c_out 0 0 0 1
• verilog最基本的设计单元是模块 模块,在此半加 模块 器中首先 将半加器定义为模块half_adder,该 模块有四个I/O端口,输入为a,b,输出为sum, c_out,并定义内部连接信号temp0,temp1。
• 字符串 字符串:由双引号括起来的一个字符序列, 必须在一行中书写完。 • 空白符 空白符:包括空格符(\b)、制表符(\tab)和换 行符。用于分割代码中的标识符,可显著 提高程序的可读性。 • 转义标识符:以”\”开始,空白符结束。
4、3数据类型
• 四值逻辑系统 四值逻辑系统:verilog HDL中变量可取四种基本值: 0(逻辑0或者false)、1(逻辑1或者true)、x(未知)、 z(高阻)。 • 线网:对应于实际物理器件之间的连接线。线网类 型变量不能储存值。 可以(1)在模块实例语句中作为连接信号使用, (2)作为连续赋值语句的输出。线网类型变量多使用 wire进行声明。如wire temp。 • 寄存器 寄存器:用关键字reg声明,通常寄存器变量对应于 实际物理电路中的存储元件(如锁存器、触发器)。 寄存器变量可用于(1)驱动子模块(连接于子模块的输 入端).(2) 在always块中作为被赋值对象。
相关文档
最新文档