版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第三节 Verilog HDL的结构描述模块数字逻辑 0506(二) 从Verilog HDL的描述风格看,分为结构描述、数据流描述、行为描述以及混合描述。本节介绍逻辑电路的结构描述方式。一.结构描述的概念 所谓结构描述就是通过调用逻辑元件、描述它们之间的连接来建立逻辑电路的Verilog HDL模型。逻辑元件Verilog HDL内置逻辑门、自主开发的已 有模块、商业IP模块。 结构描述分为门级结构描述和模块级结构描述,本课程只介绍前者。狭义理解:如何将传统意义上的“逻辑原理图”转换为 Verilog HDL的描述。二.门级结构描述(门级建模) 门级结构描述就是利用Verilog HDL内
2、置的基本门级元件以及它们之间的连接来构筑逻辑电路的模型。 “基本门级元件”是一种特殊的模块,由Verilog HDL 语言本身提供,不需要用户定义。同学应掌握“基本门级元件”的分类、调用格式及其应用。三.Verilog HDL 内置基本门元件多 输 入 门 关 键 字与门: and与非门: nand或门: or或非门: nor异或门: xor异或非门: xnor元件模型: (, , , , )只有一个输出多个输入多 输 出 门 关 键 字缓冲器: buf非门: not元件模型: (, , , , )多个输出只有一个输入三 态 门 关 键 字高电平使能缓冲器: bufif1 低电平使能缓冲器:
3、bufif0高电平使能非门: notif1低电平使能非门: notif0元件模型 ( ,)实现三态输出 对于高电平使能缓冲器 “bufif1”,若控制输入为“1”,则输入数据被传送到数据输出端;若控制输入为“0”,则数据输出端处于高阻状态“z”。 对于低电平使能缓冲器 “bufif0”,若控制输入为“0”,则输入数据被传送到数据输出端;若控制输入为“1”,则数据输出端处于高阻状态“z”。 对于高电平使能非门 “notif1”,若控制输入为“1”,则数据输出端的逻辑状态是输入的“逻辑非”;若控制输入为“0”,则数据输出端处于高阻状态“z”。 对于低电平使能非门 “notif0”,若控制输入为“0
4、”,则数据输出端的逻辑状态是输入的“逻辑非”;若控制输入为“1”,则数据输出端处于高阻状态“z”。 四.Verilog HDL 内置基本门元件的调用门级元件实例语句的格式: (端口连接表) ; 应按照各元件模型中输出、输入、控制的顺序描述信号的连接。 当对同一个基本门级元件进行多次调用时,可采用下面的元件实例语句格式: (端口连接表1) , (端口连接表2) , (端口连接表n) ;门级元件实例语句及其对应的逻辑示意图 and A1 (out1, in1, in2) ; or F2 (a, b, c, d) ; xor X1 (x_out, p1, p2) ; =1 X1 p1 p2 x_ou
5、t1 F2 b c d a& A1 in1 in2 out1门级元件实例语句及其对应的逻辑示意图 not NOT_1 (out1, out2, in) ; buf BUF_1 (bout1, bout2, bout3, bin) ; out1 out2 inNOT_1 bout1 bout2 bout3 binBUF_1门级元件实例语句及其对应的逻辑示意图 bufif1 BF1 (d_bus, m_data, en) ; bufif0 BF0 (a, b, c) ; notif1 NT1 (out, in, ctr) ; notif0 NT0 (addr, a_bus, sel) ; d_bu
6、s BF1 m_data en a BF0 b c out NT1 in ctr addr NT0 a_bus sel五. Verilog HDL门级结构描述模块的设计模型Verilog 结构描述(门级建模)模块基本结构module 模块名 (端口列表);端口定义input 输入端口output 输出端口数据类型说明wire门级建模描述and u1 (输出,输入1,输入n)not u2 (输出1,输出n,输入)bufif1 u3 (输出,输入,控制)endmodule多输入门多输出门三态门例:对下列逻辑电路进行Verilog HDL门级建模。定义三个内部连线变量&A1&A2&A3=1X11O1
7、abcinw1w2w3coutsout六. Verilog HDL门级建模举例/图示逻辑电路的门级建模 module full_adder (cout, sout, a, b, cin) ; output cout, sout ; input a, b, cin ; wire w1, w2, w3 ;/元件实例语句 and A1 ( w1, a, b ) , A2 ( w2, b, cin ) , A3 ( w3, a, cin ) ; or O1 ( cout, w1, w2, w3 ) ; xor X1 ( sout, a, b, cin ) ; endmodule 门级建模描述的是电路结
8、构,看起来比较复杂。如果阅读一个门级建模程序,很难分析其所描述的功能。第四节 Verilog HDL的数据流描述模块一.数据流描述 根据信号(变量)之间的逻辑关系,采用持续赋值语句描述逻辑电路的方式,称为数据流描述。 狭义理解:将传统意义上的“逻辑表达式”,运用Verilog HDL中的运算符,改变成持续赋值语句(assign语句)中的表达式。Verilog 数据流描述模块基本结构module 模块名 (端口列表);端口定义input 输入端口output 输出端口数据类型说明wire逻辑功能定义assign ;assign ;endmodule二.Verilog HDL数据流描述模块的设计模
9、型三.持续赋值语句(assign语句)assign 连线型变量名 = 赋值表达式 ;关键字wire型变量 wire型变量没有数据保持能力,只有被连续驱动后,才能取得确定值。(而寄存器型变量只要在某时刻得到过一次过程赋值,就能一直保持该值,直到下一次过程赋值。) 若一个连线型变量没有得到任何连续驱动,它的取值将是不定态“x”。 assign连续赋值语句就是实现对连线型变量进行连续驱动的一种方法。用Verilog HDL运算符构成的合法表达式 进一步讲, assign持续赋值语句对wire型变量赋值后,始终监视赋值表达式中的每一个操作数,只要赋值表达式中任一操作数发生变化,立即对wire型变量进行
10、更新操作,以保持对wire型变量的连续驱动。体现了组合逻辑电路的特征任何输入的变化,立即影响输出。所以,可根据组合电路的逻辑表达式,用assign持续赋值语句进行描述。/持续赋值语句应用举例 module assignment ( z , x , y ) ; input 3:0 x , y ; output 3:0 z ; wire 3:0 z , x , y ; assign z = x & y ; endmodule 根据端口信号类型的隐含特性,此句可省。这里,已不是传统意义上的单变量与运算,而是两个相同位宽向量的按位与运算。对应的逻辑原理图?x0 x1x2x3y0y1y2y3z0z1z2
11、z3&思考:若上述模块中的 assign z = x & y ; 改为assign z = x & y ; 将如何? 实际应用中,持续赋值语句的赋值目标可以是如下几种:变量(标量)wire a , b ; assign a = b ; 向量wire 7:0 a , b ;assign a = b ;向量中某一位wire 7:0 a , b ;assign a3 = b3 ;向量中某几位wire 7:0 a , b ;assign a3:2 = b3:2 ;拼接 wire a , b ; wire 2:1 c ;assign a , b = c ;四.数据流描述举例例:请用Verilog HDL
12、数据流描述方式描述 的逻辑功能。module ff_1(A,B,C,D,F); input A,B,C,D; output F; wire w1,w2; assign w1=A&B; assign w2=(C&D); assign F=w1|w2;endmodule所有assign语句并发执行,和程序中的位置无关。第五节 Verilog HDL的行为描述模块一.行为描述 逻辑电路的结构描述侧重于表示一个电路由哪些基本元件组成,以及这些基本元件的相互连接关系。 逻辑电路的数据流描述侧重于逻辑表达式以及Verilog HDL中运算符的灵活运用。 行为描述关注逻辑电路输入、输出的因果关系(行为特性)
13、,即在何种输入条件下,产生何种输出(操作),并不关心电路的内部结构。EDA的综合工具能自动将行为描述转换成电路结构,形成网表文件。 显然,当电路的规模较大或时序关系较复杂时,通常采用行为描述方式进行设计。二. Verilog HDL行为描述模块的设计模型Verilog 行为描述模块基本结构module 模块名 (端口列表);端口定义input 输入端口 output 输出端口数据类型说明 reg parameter逻辑功能定义always (敏感事件列表)begin阻塞、非阻塞、if-else、case、for等行为语句endendmodule三.行为描述中的 always进程应用模板alwa
14、ys ( ) begin /过程赋值语句 /if-else, case, casex, casez选择语句 /for循环语句 end 一般情况下,always进程带有触发条件,这些触发条件列在敏感信号表达式中,只有当触发条件满足时,begin-end块语句才被执行。 在一个Verilog HDL模块中可以有多个always进程,它们是并发执行的。 敏感信号表达式 又称敏感事件列表。当该表达式中任意一个信号(变量)的值改变时,就会引发块内语句的执行。因此,应将所有影响块内取值的信号(变量)列入。多个敏感信号用“or”连接。例如: ( a ) /当信号a的值发生改变时 (a or b) /当信号a
15、或信号b的值发生改变时 这里a和b称为电平敏感型信号,代表的触发事件是,信号除了保持稳定状态以外的任意一种变化过程。 这种电平敏感型信号列表常用在组合逻辑的描述中,以体现输入随时影响输出的组合逻辑特性。 再例如: ( posedge clock ) /当clock的上升沿到来时 ( negedge clock ) /当clock的下降沿到来时 ( posedge clock or negedge reset ) /当clock的上升沿到来或当reset的下降沿到来时 这里的clock和reset信号称为边沿敏感型信号,posedge描述对信号的上升沿敏感;negedge描述对信号的下降沿敏感。
16、显然,这种边沿敏感型信号列表适合描述同步时序电路,以体现同步时序电路的特点在统一时钟作用下改变电路的状态。 posedge 代表的触发事件是, 信号发生了正跳变。 0 x , 0z , 01 , x1 , z1negedge 代表的触发事件是, 信号发生了负跳变。 1x , 1z , 10 , x0 , z0 在每一个always过程语句中,最好只使用一种类型的敏感信号列表,不要混合使用。以避免使用不同的综合工具时发生错误。四. 串行块 由关键字begin-end界定的一组语句。串行块的特点:一般情况下,块内语句顺序执行,前面一条语句执行毕 后,才开始执行下一条语句。模块运行时,遇到串行块,块
17、内第一条语句即开始执行, 最后一条执行完毕,串行块结束。整个串行块执行时间等于块内各条语句执行时间的总和。begin 语句1 语句2 endmodule ff_1(A,B,C,D,F); input A,B,C,D; output F; wire w1,w2; assign w1=A&B; assign w2=(C&D); assign F=w1|w2;endmodulemodule ff_1(A,B,C,D,F); input A,B,C,D; output F; reg F, w1,w2; always (A or B or C or D) begin w1=A&B; w2=(C&D);
18、F=w1|w2; endendmodule行为描述串行块只应用在always进程中:多条语句;顺序执行。 过程赋值语句必须放在always进程中,分为阻塞型和非阻塞型,其基本格式为: 被赋值变量赋值操作符赋值表达式 reg 或 integer 类型变量;寄存器向量的某一位或某几位;用拼接符 拼接起来的寄存器。= 阻塞赋值操作符= 非阻塞赋值操作符任意合法表达式五. 过程赋值语句/过程赋值语句的目标变量形式 reg a ; reg 7:0 b ; integer i ; always (敏感事件列表) begin a = 0 ; i =356 ; b2 = 1b1 ; b3:0 = 4b1111
19、 ; a,b = 9b101110110 ; end 过程赋值语句阻塞型过程赋值非阻塞型过程赋值操作符“=”在前面讨论中,用到的赋值语句都是阻塞型过程赋值语句串行块(begin-end )内各条阻塞型过程赋值语句按顺序 依次执行。下一条语句的执行被阻塞,等本条语句的赋值 操作完成后,才开始执行。阻塞型过程赋值语句的执行过程:先计算“赋值表达式”的 值,然后立即赋值给“=”左边的“被赋值变量”。过程赋值语句非阻塞型过程赋值阻塞型过程赋值操作符“=”特点:在begin-eng串行块语句中,各条非阻塞过程赋值语句对应的 “赋值表达式”同时开始计算。在过程块结束时,才将结果赋值给各个 “被赋值变量”。
20、可理解为先同时采样,最后一起赋值。 begin A = B ; /S1 B = A ; /S2 end这里,S1、 S2语句均为非阻塞赋值,立即开始计算B 和 A值(上次的值)。在过程块结束时,进行赋值操作,将计算得到的B,A的值赋给变量A,B。(实现A,B交换) 如果不能很好地理解阻塞赋值与非阻塞赋值的区别,往往给设计带来麻烦,特别是在可综合逻辑模块中,不易把握reg型变量的赋值过程。建议同学在编写模块时,只采用一种过程赋值方式,并且最好不要将输出再次作为输入使用。 为了更好地理解阻塞赋值与非阻塞赋值的区别,我们观察下面的示例。/例1:非阻塞赋值module n_block(c,b,a,cl
21、k); output c, b ; input clk, a ; reg b, c; always (posedge clk) begin b=a; c D Q D Qclkabc D Qclkacb例1 非阻塞赋值综合结果例2 阻塞赋值综合结果 阻塞赋值与非阻塞赋值是学习Verilog HDL的难点之一,应仔细体会。高级程序语句 if-else 条件分支语句case 分支控制语句6.1 if-else 条件分支语句格式1 if () 语句或语句块;格式2 if ( ) 语句或语句块1; else 语句或语句块2;格式3 if ( ) 语句或语句块1; else if ( ) 语句或语句块2;
22、 else if ( ) 语句或语句块n; else 语句或语句块n+1;两路分支选择控制多路分支选择控制六. 条件语句 三种格式中的,一般为逻辑表达式或关系表达式,也可以是一位的变量。 系统对的值进行判断,若为 0 、x 、z,按“假”处理;若为 1 ,按“真”处理,执行指定语句。语句可以是单句,也可以是多句,多句时用begin-end括起来。 为了清晰表达 if 和 else 的匹配关系,建议最好用begin-end 将“指定语句”括起来。/if-else条件分支语句应用举例 module sel-from-three (q,sela,selb,a,b,c) ; input sela,se
23、lb,a,b,c ; output q ; reg q ; always (sela or selb or a or b or c) begin if (sela) q=a ; else if (selb) q=b ; else q=c ; end endmodule sela selb 语句 0 0 q=c 0 1 q=b 1 0 q=a 1 1 q=a注意隐含的优先级关系。排在前面的分支项指定的操作具有较高优先级。例:11时,执行q=a,不是q=b。6.2 case 分支控制语句 相对if-else语句只有两个分支而言,case语句是一种多分支语句。所以,常用来描述译码器、多路数据选择器、
24、微处理器的指令译码和有限状态机。case 分支控制语句有三种形式: case casex casez全等比较分支控制局部比较分支控制“全等比较分支控制” case 语句的格式: case () :语句块1 ; :语句块2 ; :语句块n ; default : 语句块n+1 ; endcase对程序流向进行控制的信号(变量)控制信号(变量)的具体状态组合取值受控的分支操作,可单句,也可多句。未列入分支控制的状态组合下应进行的操作未列入分支控制的状态组合的统称。 (其余状态时)与真值表存在某种对应关系 按位全等比较case语句示例 case (op_code) 2b00 : out = a b
25、; 2b01 : out = a & b ; 2b10 : out = (a & b) ; 2b11 : out = a b ; default : out = 0 ; endcase case语句在执行时,控制表达式和分支项表达式之间进行的是按位全等比较,只有对应每一位都相等,才认为控制表达式和分支项表达式是相等的。显然,这种比较包含了信号的 0 、 1 、x 、z 四种状态。 根据按位全等比较的特点,要求case语句中的控制表达式和分支项表达式必须具有相同的位宽。当各个分支项表达式以常数形式给出时,必须明确标明位宽,否则编译器默认为与机器字长相同的位宽(例如32位)。能不能忽略信号的 x 和 z 逻辑状态的比较?这就引出了“局部比较”分支控制的casex和casez语句。利用控制表达式和分支项表达式中某些位的比较结果控制程序流向。 casez 语句忽略处于“z”逻辑状态位的比较。casex语句忽略处于“x”或“z”逻辑状态位的比较。 casex语句示例 reg 7:0 out ; always (a or b or opcode ) begin casex (opcode) 4b1zzx : out = a+b ; 4b01xx : out = a-b ; 4b001? : out = (a)+1 ; 4b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年锅炉压力容器操作工面试题库
- 2026年金融投资知识全面测试题库
- 2026年儿童先心病介入治疗术后抗血小板治疗方案选择考核练习题
- 2026年书店售书窗口人员礼仪知识自测题
- 2026年青年干部科研仪器开放共享政策知识题库
- 2026年城市桥梁上跨河管线管理办法知识测试题
- 2026年劳动人事争议调解仲裁题库
- 2026年乡镇道路结冰安全出行知识测试题
- T-GSWS 021-2025 陇南白茶标准
- 改造提升工作方案
- 2026年燃气从业资格证试题预测试卷重点附答案详解
- 2026年山东省青岛市市北区中考英语一模试卷(含答案)
- 湖南省常德市澧县2024-2025学年七年级下学期期中语文试题(含答案)
- (2025)国家基层糖尿病防治管理指南课件
- 污水处理厂督查工作制度
- 党务基础知识题库(附参考答案)
- 工程机械服务管理
- 2026安徽省交控建设管理有限公司校园招聘5人笔试历年参考题库附带答案详解
- 河南省事业单位工勤(收银审核员高级技师)复习题(附答案)
- (新教材)2026年春期部编人教版三年级下册语文 第四单元 核心素养教案(反思无内容)
- 压力容器生产单位质量安全员安全总监-特种设备考试题库及答案
评论
0/150
提交评论