基本数字逻辑单元HDL描述(第3讲)

合集下载

第6章 基本数字逻辑单元HDL描述(第3讲)

第6章 基本数字逻辑单元HDL描述(第3讲)

基本数字逻辑单元HDL描述基本数字逻辑单元HDL 描述--时序逻辑电路HDL 描述时序逻辑电路的输出状态不仅与输入变量的状态有关,而且还与系统原先的状态有关。

⏹时序电路最重要的特点是存在着记忆单元部分;⏹时序电路主要包括:⏹触发器和锁存器⏹计数器⏹移位寄存器⏹脉冲宽度调制等。

时序逻辑电路HDL 描述--D 触发器HDL 描述D触发器是数字电路中应用最多的一种时序电路。

输入输出CLRPRE CE D C Q 1X X X X 001X X X 1000X X 无变化0010↑00011↑1D 触发器真值表D 触发器HDL 描述--带时钟使能和异步置位的D 触发器描述module v_registers_5 (C, D, CE, PRE, Q);input C, CE, PRE;input [3:0] D;output reg [3:0] Q;always @(posedge C or posedge PRE)beginif (PRE) Q <= 4'b1111;elseif (CE) Q <= D;endendmodule该设计保存在本书配套资源\eda_verilog\example6_15目录下时序逻辑电路HDL描述--Jk触发器HDL描述JK触发器真值表输入输出R S CE J K C Q1X X X X↑001X X X↑1000X X X无变化00100X无变化00101↑000111↑翻转00110↑1Jk 触发器HDL 描述--带时钟使能和异步置位/复位的JK 触发器module JK_FF(CLK,J,K,Q,RS,SET);input CLK,J,K,SET,RS;output Q;reg Q;always @(posedge CLK or negedge RS or negedge SET)beginif(!RS) Q <= 1'b0;else if(!SET) Q <= 1'b1;else下一页继续Jk 触发器HDL 描述--带时钟使能和异步置位/复位的JK 触发器case({J,K})2'b00 : Q <= Q;2'b01 : Q <= 1'b0;2'b10 : Q <= 1'b1;2'b11 : Q <= ~Q;default: Q<= 1'bx;endcase endendmodule该设计保存在本书配套资源\eda_verilog\example6_16目录下时序逻辑电路HDL描述--RS触发器HDL描述RS触发器真值表输入输出R S C Q00↑无变化01↑110↑011↑无变化时序逻辑电路HDL 描述--RS 触发器HDL 描述的例子module rs_ff(input r,input s,input clk,output reg q,output reg qn );always @(*)beginqn <= ~q;end下一页继续时序逻辑电路HDL 描述--RS 触发器HDL 描述的例子always @(posedge clk)begincase({r,s})2'b00: q <= q;2'b01: q <= 1;2'b10: q <= 0;2'b11: q <= q;default: q<=1'bx;endcase endendmodule该设计保存在本书配套资源\eda_verilog\example6_17目录下时序逻辑电路HDL 描述--锁存器HDL 描述锁存器和触发器不同之处,就在于触发方式的不同☐触发器是靠敏感信号的边沿触发;☐锁存器是靠敏感信号的电平触发。

HDL课件3

HDL课件3

例5.5.2 module
DFF(Q,D,CP); output Q; input D,CP; reg Q; always @(posedge CP) Q<=D; endmodule





module asy_set_rst_DFF(Q,QN,D,CP,Sd,Rd); Output Q,QN; Input D,CP,Sd,Rd; Reg Q,QN; always @(posedge CP or negedge Sd or negedge Rd) If (~Sd || ~Rd) If (~Sd) begin Q<=1’b1; QN<=1’b0; end else begin Q<=1’b0; QN<=1’b1; end else begin Q<=D; QN<=~D; end endmodule
module
sync_rst_DFF(Q,D,CP,Rd); output Q; input D,CP,Rd; reg Q; always @(posedge CP) if (~Rd) Q<=1’b0; else Q<=D; endmodule

例 5.5.3 module JK_FF(Q,Qnot,J,K,CP); output Q,Qnot; input J,K,CP; reg Q; assign Qnot=~Q; always @(negedge CP) case ({J,K}) 2’b00:Q<=Q; 2’b01:Q<=1’b0; 2’b10:Q<=1’b1; 2’b11:Q<=~Q; endcase endmodule

第3章(3) 定时hdl

第3章(3)  定时hdl

优点:不需增加硬设备,只需编制相应的延时程序以备 调用。
缺点:CPU执行延时待时间增加了CPU的时间开销,延时 时间越长,这种等待开销越大,降低了CPU的效率, 浪费了CPU的资源。
2.硬件定时
它是采用可编程的定时/计数器或单稳延 时电路产生定时或延时。
优点:
① 不占用CPU的时间,定时时间长,使用灵活。
第三章 定时/计数技术
3.5.1 基本概念
一、问题的提出:
1.定时(信号具有周期性) 例如: ① 一天24小时的计时(称为日时钟)。 ② 在监测系统中,对被测点的定时采样。 ③ 在读键盘时,为去抖,一般延迟一段时间,再读。 ④ 在步进电机速度控制程序中,利用时间间隔来控制步 进电机的转速。 2.计数(信号具有随机性) 例如: ① 对零件和产品的计数; ② 对大桥和高速公路上车流量的统计,等等。
3.5.2 可编程定时/计数器8253/8254
基本特点:
3个独立的16位定时/计数器(T/C); 每个T/C功能: 1) 可按二、十进制(BCD)计数; 2) 有6种不同的工作方式; 3) 最高频率10MHz; 4) 有读回状态/当前计数值功能。
1. 外部连接特性
面向CPU的信号线: ① 数据总线D0~D7:为三态输出/输入线。 8 7 用于将8253与系统数据总线相连。 6 ② 片选线CS-:输入信号,低电平有效。 5 4 ③ 读信号RD-:输入信号,低电平有效。 3 2 ④ 写信号WR-:输入信号,低电平有效。 1 ⑤ 地址线A1A0:这两根线接到系统地址总 21 22 路线的A1A0上。 23 面向I/O设备的信号线: ⑥ 计数器时钟信号CLK:输入信号。 ⑦ 计数器门控选通信号GATE0-2:输入 信号。 ⑧ 计数器输出信号OUT0-2;为输出信号。

第3讲 Verilog HDL常用建模方法汇总

第3讲 Verilog HDL常用建模方法汇总
在传输信号时没有延迟。但是,当开关值切换时有开 (turn-on)和关(turn-off)延迟。可以给双向开关指 定0个、1个或2个延迟,如下表所示。
specify块 也可以给使用开关设计的模块指定路径延迟(引脚到引
脚的延迟)以及时序检查。用specify块可以描述路径延 迟。在第10章中详细讨论了路径延迟说明,它在开关级 模型中也完全适用。
描述方式:
因为开关是用Verilog原语定义的,类似 于逻辑门,实例名称是可选项,所以调用 (实例引用)开关时可以不给出实例名称。
信号out的值由信号data和control的值确定。 out的逻 辑值如表11.1所示。 信号data和control的不同组合导致 这两个开关输出1,0或者z或x,逻辑值(如果不能确定 输出为1或0,就有可能输出z值或x值)。符号L代表0或 z,H代表1或z。
因此,NMOS开关在control信号是1时导通。如果 control信号是0,则输出为高阻态值。与此类似,如 果control信号是0,则PMOS开关导通。 具体的输入 输出参见下表:
CMOS开关用关键字cmos声明。CMOS开关的符号如下图所 示。
CMOS开关实例的引用: CMOS门本质上是两个开关(NMOS和PMOS)的组合体可
f=ab …
主讲 陈付
安徽师范大学 2015
第3讲 Verilog HDL常用建模方法
电路(开关级)级建模
门级(逻辑级)建模
数据流建模
行为级(RTL级)建模
Verilog模型可以是实际电路不同级别的抽象。这些抽象的级别和它们对应的模型 类型共有以下五种: (1)系统级(system) (2)算法级(algorithmic) (3)RTL级(Register Transfer Level): (4)门级(gate-level): (5)开关级(switch-level)

第三章 Verilog HDL的基本语法汇总

第三章 Verilog  HDL的基本语法汇总
单元,每个单元为8位 reg [32:1] memory2[1:512]; //存储器为
512个单元,每个单元为32位
3.3 Verilog HDL的运算符
算术运算符 逻辑运算符 关系运算符 等值运算符 位运算符 缩减运算符 移位运算符 条件运算符 拼接运算符
1.算术运算符
算术运算符包括: + (加法运算符或正值运算符,如x+y,+8) - (减法运算符或负值运算符,如x-y,-90) * (乘法运算符,如x*y) / (除法运算符,如x/y) % (取模运算符,如x % y)
1.间隔符: Verilog 的间隔符主要起分隔文本的作用,可以使 文本错落有致,便于阅读与修改。
间隔符包括空格符(\b)、TAB 键(\t)、换行符(\n)及 换页符。
2.注释符:注释只是为了改善程序的可读性,在编译时不起作用。 多行注释符(用于写多行注释): /* --- */; 单行注释符 :以//开始到行尾结束为注释文字。
3.标识符和关键词
标识符:给对象(如模块名、电路的输入与输出端口、变
量等)取名所用的字符串。以英文字母或下划线开始
如,clk、counter8、_net、bus_A 。
关键词:是Verilog语言本身规定的特殊字符串,用来定义 语言的结构。例如,module、endmodule、input、 output、wire、reg、and等都是关键词。关键词都是小 写,关键词不能作为标识符使用 。出始终根据输入的变化而 更新其值的变量,它一般指的是硬件电路中的各种物理 连接.
例:网络型变量L的值由与门的驱动信号 a和b所决定,即L=a&b。a、b的值发 生变化,线网L的值会立即跟着变化。
a
&L

基本数字逻辑单元HDL描述(第2讲)

基本数字逻辑单元HDL描述(第2讲)

基本数字逻辑单元HDL 描述LOGO数据运算操作主要包含加法操作、减法操作、乘法操作和除法操作,由这四种运算单元和逻辑运算单元一起,可以完成复杂数学运算。

HDL语言中提供了丰富的数据算术操作的运算符。

组合逻辑电路的HDL 描述--数据运算操作HDL 描述加法操作HDL 描述--带进位输入和输出无符号8位加法的例子module v_adders_2(A, B, CI, SUM);input [7:0] A;input [7:0] B;input CI;output [7:0] SUM;assign SUM = A + B + CI;endmodule减法操作HDL 描述--无符号带借位8位减法器的例子module v_adders_8(A, B, BI, RES);input [7:0] A;input [7:0] B;input BI;output [7:0] RES;assign RES = A -B -BI;endmodule乘法操作HDL 描述--8位与4位无符号数相乘的例子module v_multipliers_1(A, B, RES);input [7:0] A;input [3:0] B;output [11:0] RES;assign RES = A * B;endmodule除法操作HDL 描述--无符号8位除法运算的例子module div(input [7:0] numerator,input [7:0] denominator,output [7:0] quotient,output [7:0] remainder);assign quotient=numerator/denominator;assign remainder=numerator % denominator;endmodule数据运算操作HDL 描述--算术逻辑单元HDL 描述前面介绍了加法器和减法器电路的设计。

HDL 第3次课

HDL 第3次课

2‘b1x==2’b0x 值为0,因为不相等
2‘b1x==2’b1x
值为x,因为可能不 相等,也可能相等
case等
=== 0 1 x z 0 1 0 0 0 1 0 1 0 0 x 0 0 1 0 z 0 0 0 1
a = 2'b1x; b = 2'b1x; if (a === b) $display(" a is identical to b"); else $display(" a is not identical to b");
module equalities2(); reg [3: 0] rega, regb, regc; 等式运算符 reg val; initial begin rega = 4'b0011; === 全等(case等) regb = 4'b1010; ! == 非全等(case不等) regc = 4'b1x10; end initial fork #10 val = rega === regb ; // val = 0 • 其结果是1’b1、1’b0。 • 如果左边及右边的值相同(包 #20 val = rega !== regc; // val = 1 #30 val = regb === regc; // val = 0 括x、z),则结果为1。 •如果左边及右边的值不相同, #40 val = regc === regc; // val = 1 #50 $finish; 则结果为0。 join •!==的结果与 === 相反 endmodule
HDL 数字系统设计
模块的结构 基本词汇
常量变量及其数据类型 运算符及分类
第三讲 常用 Verilog 语法(二)

HDL

HDL

安康学院 电子与信息工程系电子教研室
3.1 模块的结构
功能定义
模块中最重要的部分是逻辑功能定义部分。 模块中最重要的部分是逻辑功能定义部分。有三种方法可在 模块中产生逻辑。 模块中产生逻辑。 - 用 assign 语句(数据流描述): assign a = b & c ; - 用实例元件(结构化描述): and2 and_inst ( q, a, b); - 用 “always” 块(行为描述): always” always @ (posedge clk or posedge clr) begin if (clr) q<= 0; else if (en) q<= d; end
安康学院 电子与信息工程系电子教研室
3.2 数据类型及其常量及变量
二. reg型 reg型
寄存器是数据储存单元的抽象。 寄存器是数据储存单元的抽象。寄存器数据类型的关键字是 reg。 reg类型数据的默认初始值为不定值x。 reg。 reg类型数据的默认初始值为不定值x 类型数据的默认初始值为不定值 reg型数据常用来表示用于 always”模块内的指定信号 型数据常用来表示用于“ 模块内的指定信号, reg型数据常用来表示用于“always 模块内的指定信号,常 代 表触发器。 always”块内被赋值的每一个信号都必须定义成 表触发器。在“always 块内被赋值的每一个信号都必须定义成 reg型 reg型。 reg型数据的格式如下 型数据的格式如下: reg型数据的格式如下: [n数据名1,数据名2, 1,数据名2,… 数据名i; 数据名i; reg [n-1:0] 数据名1,数据名2, 或 数据名1,数据名2, 1,数据名2,… 数据名i; 数据名i; reg [n:1] 数据名1,数据名2,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基本数字逻辑单元HDL 描述LOGO基本数字逻辑单元HDL 描述--时序逻辑电路HDL 描述时序逻辑电路的输出状态不仅与输入变量的状态有关,而且还与系统原先的状态有关。

⏹时序电路最重要的特点是存在着记忆单元部分;⏹时序电路主要包括:⏹触发器和锁存器⏹计数器⏹移位寄存器⏹脉冲宽度调制等。

时序逻辑电路HDL 描述--D 触发器HDL 描述D触发器是数字电路中应用最多的一种时序电路。

输入输出CLRPRE CE D C Q 1X X X X 001X X X 1000X X 无变化0010↑00011↑1D 触发器真值表D 触发器HDL 描述--带时钟使能和异步置位的D 触发器描述module v_registers_5 (C, D, CE, PRE, Q);input C, CE, PRE;input [3:0] D;output reg [3:0] Q;always @(posedge C or posedge PRE)beginif (PRE) Q <= 4'b1111;elseif (CE) Q <= D;endendmodule该设计保存在本书配套资源\eda_verilog\example6_15目录下时序逻辑电路HDL描述--Jk触发器HDL描述JK触发器真值表输入输出R S CE J K C Q1X X X X↑001X X X↑1000X X X无变化00100X无变化00101↑000111↑翻转00110↑1Jk 触发器HDL 描述--带时钟使能和异步置位/复位的JK 触发器module JK_FF(CLK,J,K,Q,RS,SET);input CLK,J,K,SET,RS;output Q;reg Q;always @(posedge CLK or negedge RS or negedge SET)beginif(!RS) Q <= 1'b0;else if(!SET) Q <= 1'b1;else下一页继续Jk 触发器HDL 描述--带时钟使能和异步置位/复位的JK 触发器case({J,K})2'b00 : Q <= Q;2'b01 : Q <= 1'b0;2'b10 : Q <= 1'b1;2'b11 : Q <= ~Q;default: Q<= 1'bx;endcase endendmodule该设计保存在本书配套资源\eda_verilog\example6_16目录下时序逻辑电路HDL描述--RS触发器HDL描述RS触发器真值表输入输出R S C Q00↑无变化01↑110↑011↑无变化时序逻辑电路HDL 描述--RS 触发器HDL 描述的例子module rs_ff(input r,input s,input clk,output reg q,output reg qn );always @(*)beginqn <= ~q;end下一页继续时序逻辑电路HDL 描述--RS 触发器HDL 描述的例子always @(posedge clk)begincase({r,s})2'b00: q <= q;2'b01: q <= 1;2'b10: q <= 0;2'b11: q <= q;default: q<=1'bx;endcase endendmodule该设计保存在本书配套资源\eda_verilog\example6_17目录下时序逻辑电路HDL 描述--锁存器HDL 描述锁存器和触发器不同之处,就在于触发方式的不同☐触发器是靠敏感信号的边沿触发;☐锁存器是靠敏感信号的电平触发。

时序逻辑电路HDL 描述--锁存器HDL 描述的例子module v_latches_2 (gate,data,set, Q);input gate, data, set;output Q;reg Q;always @(gate,data,set)beginif (!set) Q = 1'b0;else if(gate) Q = data;end endmodule时序逻辑电路HDL 描述--计数器HDL 描述根据计数器的触发方式不同,计数器可以分为:同步计数器和异步计数器两种。

☐当赋予计数器更多的功能时,计数器的功能就非常复杂了。

☐计数器是常用的定时器的核心部分。

✓当计数器输出控制信号时,计数器也就变成了定时器了。

⏹本节只介绍同步计数器的设计。

✓同步计数器指在时钟脉冲(计数脉冲)的控制下,计数器做加法或减法的运算。

时序逻辑电路HDL 描述--计数器HDL 描述一个8进制(范围0~7)的计数器是一个3位二进制的计数器。

计数器HDL 描述--3位计数器描述的例子module count3(input wire clk,input wire clr,output reg [2:0] q );always @(posedge clk or posedge clr)beginif(clr == 1)q <= 0;elseq <= q + 1;endendmodule计数器HDL 描述--5进制计数器描述的例子module mod5cnt(input wire clr,input wire clk,output reg [2:0] q );always @(posedge clr or posedge clk)beginif(clr == 1)q <= 0;else if(q == 4)q <= 0;elseq <= q + 1;endendmodule时序逻辑电路HDL 描述--时钟分频器HDL 描述q(i)频率(Hz )周期(ms )q(i)频率(Hz )周期(ms )025000000.000.00004126103.520.16384112500000.000.00008133051.760.3276826250000.000.00016141525.880.6553633125000.000.0003215762.94 1.3107241562500.000.0006416381.47 2.621445781250.000.0012817190.73 5.242886390625.000.002561895.3710.485767195312.500.005121947.6820.97152897656.250.010242023.8441.94304948828.130.020482111.9283.886081024414.060.0409622 5.96167.77216分频时钟频率和计数器的关系(输入时钟50MHz)时序逻辑电路HDL 描述--时钟分频器HDL 描述的例子module clkdiv(input wire clr,input wire mclk,output wire clk190,output wire clk48);reg [24:0] q;always @ (posedge mclk or posedge clr)begin下一页继续时序逻辑电路HDL 描述--时钟分频器HDL 描述if(clr == 1)q <= 0;elseq <= q + 1;endassign clk190 = q[17];assign clk48 = q[19];endmodule时序逻辑电路HDL 描述--移位寄存器HDL 描述本节介绍下面:⏹通用移位寄存器HDL 描述⏹环形移位寄存器HDL 描述⏹消抖电路HDL 描述⏹时钟脉冲电路HDL 描述时序逻辑电路HDL 描述--通用移位寄存器HDL 描述在每一个时钟脉冲时,数据从一个触发器移动到另一个触发器。

串行数据data_in 从移位寄存器的左边输入进来,在每个时钟到来时,q3移动到q2,q2移动到q1,q1移动到q0。

--16位串入/串出移位寄存器的描述module shift16(input a,input clk,output b);wire [15:0] z;assign z[0]=a;下一页继续--16位串入/串出移位寄存器的描述assign b=z[15];genvar i;generatefor (i=0; i<15; i=i+1)begin: g1dff Dffx(z[i],clk,z[i+1]);endendgenerateendmodule通用移位寄存器HDL 描述--预定义移位操作符实现逻辑左移的例子module logical_shifter_3(input [7:0] DI,input [1:0] SEL,output reg[7:0] SO);always @(DI or SEL)begin下一页继续通用移位寄存器HDL 描述--预定义移位操作符实现逻辑左移的例子case (SEL)2'b00: SO = DI;2'b01: SO = DI << 1;2'b10: SO = DI << 2;2'b11: SO = DI << 3;default: SO = DI;endcaseendendmodule通用移位寄存器HDL 描述--for 循环实现16位移位寄存器的例子module shift_registers_1 (input c,input si,output so);reg [15:0] tmp;integer i;assign so=tmp[15];下一页继续通用移位寄存器HDL 描述--for 循环实现16位移位寄存器的例子always @(posedge c)beginfor(i=0;i<15;i=i+1)tmp[i+1]<=tmp[i];tmp[0]<=si;endendmodule通用移位寄存器HDL 描述--并置操作实现16位移位寄存器的例子module shift_register_5(input SI,input clk,output reg[15:0] PO);reg[15:0] temp=0;always @(posedge clk)begintemp <= {temp[14 : 0], SI};PO <= temp;endendmodule环形移位寄存器HDL 描述--四位右移环形移位寄存器的例子module ring4(input wire clk,input wire clr,output reg [3:0] q);always @(posedge clk or posedge clr)beginif(clr == 1)下一页继续环形移位寄存器HDL 描述--四位右移环形移位寄存器的例子q <= 1;elsebeginq[3] <= q[0];q[2:0] <= q[3:1];endendendmodule时序逻辑电路HDL 描述--消抖电路HDL 描述当按键时,不可避免的引起按键的抖动,需要大约ms 级的时间才能稳定下来。

相关文档
最新文档