




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
硬件描述语言及其在数字系统中的应用 主讲 谢跃雷 副教授 2020 2 28 1 第四讲数据流建模 连续赋值语句表达式 操作符数据流建模实例 2020 2 28 2 门级建模特点 优点 直接简洁在电路规模较小时 对于有数字逻辑电路基础的设计来说 门级建模简单直观 缺点 电路规模较大时 繁琐易错 需要考虑高层次建模 数据流 dataflow 建模 描述数据在寄存器间的流动和处理过程 当今设计公司已经不在从门级结构角度进行设计 而是从更高的抽象层次设计 典型的是RTL RegisterTransferLevel 设计 通常指的是数据流建模和行为建模的结合 2020 2 28 3 4 1连续赋值语句 连续赋值语句是verilog数据流建模的基本语句 用于对线网进行赋值 它等价于门级描述 然而是从更高的抽象角度来对电路进行描述 连续赋值语句必须以关键词assign开始 其语法如下 assign delay target expression 连续赋值语句的左值必须是一个标量或向量线网 或者是标量或向量线网的拼接 而不能是标量或向量寄存器 连续赋值语句特点 1 连续赋值语句 2020 2 28 4 连续赋值语句总是处于激活状态 只要任意一个操作数发生变化 表达式就会被立即重新计算 并且将结果赋给等号左边的线网 操作数可以是标量或向量的线网或寄存器 也可以是函数调用 赋值延迟用于控制对线网赋予新值的时间 根据仿真时间单位进行说明 赋值延迟类似于门延迟 对于描述实际电路中的时序是非常有用的 连续赋值语句 out是线网 i1和i2也是线网wireout i1 i2 assignout i1 连续赋值语句 adr是线网 adr1 bits和adr2 bits是寄存器assignadr 15 0 adr1 bits 15 0 adr2 bits 15 0 2020 2 28 5 连接操作 左边是一个标量线网和一个向量线网拼接assign c out sum 3 0 a 3 0 b 3 0 c in 隐式连续赋值 连续赋值语句 out是线网 i1和i2也是线网wireout assignout i1 隐式连续赋值语句wireout i1 连续赋值语句 i1和i2也是线网wirei1 i2 assignout i1 out被自动认为是线网类型 2020 2 28 6 2 延迟 连续赋值语句中的延迟用于控制任一操作数发生变化到语句左值被赋予新值之间的时间间隔指定赋值延迟的方法有三种 隐式赋值延迟和线网声明延迟 in1和in2任一发生变化 计算in1 in2新值赋于左边 会有10个单位延迟 在10单位延迟期间 若in1和in2再次变化 则取in1和in2当前值计算 也就是说 小于延迟的输入脉冲不影响输出 2020 2 28 7 2020 2 28 8 4 2表达式 操作符和操作数 数据流建模使用表达式而不是门级原语来描述设计 表达式 操作符和操作数构成了数据流建模的基础 表达式 由操作符和操作数构成 目的是根据操作符计算出一个值 操作数 可以是定义过的任何数据类型 有时要根据操作符的要求限制 操作符 对操作数进行运算并产生一个结果 2020 2 28 9 1 操作符类型 下表以优先级顺序列出了Verilog操作符 注意 与 操作符的优先级总是比相同类型的 或 操作符高 2020 2 28 10 2 Verilog中的大小 size 与符号 Verilog根据表达式中变量的长度对表达式的值自动地进行调整 Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度 当一个负数赋值给无符号变量如reg时 Verilog自动完成二进制补码计算 modulesign size reg 3 0 a b reg 15 0 c a 1 a是无符号数 因此其值为1111b 8 c 8 b c 1000 10b b a 结果10111截断 b 0111 10c c a c 16 b10111 endmodule 2020 2 28 11 3 算术操作符 modulearithops parameterfive 5 integerans int reg 3 0 rega regb reg 3 0 num initialbeginrega 3 regb 4 b1010 int 3 int 1111 1111 1101endinitialfork 10ans five int ans 15 20ans int 5 2 ans 1 30ans five int ans 1 40num rega regb num 1101 50num rega 1 num 0100 60num int num 1101 70num regb rega num 1 80 finish joinendmodule 加 减 乘 除 模 将负数赋值给reg或其它无符号变量使用2进制的补码算术 如果操作数的某一位是x或z 则结果为x在整数除法中 余数舍弃模运算中使用第一个操作数的符号 注意integer和reg类型在算术运算时的差别 integer是有符号数 而reg是无符号数 2020 2 28 12 4 按位操作符 modulebitwise reg 3 0 rega regb regc reg 3 0 num initialbeginrega 4 b1001 regb 4 b1010 regc 4 b11x0 endinitialfork 10num regajoinendmodule1 not and or xor xnor xnor 按位操作符对矢量中相对应位运算 regb 4 b1010regc 4 b1x10num regb位值为x时不一定产生x结果 当两个操作数位数不同时 位数少的操作数零扩展到相同位数 a 4 b1011 b 8 b01010011 c a b a零扩展为8 b00001011 2020 2 28 13 5 逻辑操作符 modulelogical parameterfive 5 regans reg 3 0 rega regb regc initialbeginrega 4 b0011 逻辑值为 1 regb 4 b10 xz 逻辑值为 1 regc 4 b0z0 x 逻辑值为 x endinitialfork 10ans regajoinendmodule not and or 逻辑操作符的结果为一位1 0或x 逻辑操作符只对逻辑值运算 如操作数为全0 则其逻辑值为false如操作数有一位为1 则其逻辑值为true若操作数只包含0 x z 则逻辑值为x 逻辑反操作符将操作数的逻辑值取反 例如 若操作数为全0 则其逻辑值为0 逻辑反操作值为1 2020 2 28 14 6 逻辑反与位反的对比 modulenegation reg 3 0 rega regb reg 3 0 bit reglog initialbeginrega 4 b1011 regb 4 b0000 endinitialfork 10bit rega num 0100 20bit regb num 1111 30log rega num 0 40log regb num 1 50 finish joinendmodule logicalnot逻辑反 bit wisenot位反 逻辑反的结果为一位1 0或x 位反的结果与操作数的位数相同 逻辑反操作符将操作数的逻辑值取反 例如 若操作数为全0 则其逻辑值为0 逻辑反操作值为1 2020 2 28 15 7 一元归约操作符 modulereduction regval reg 3 0 rega regb initialbeginrega 4 b0100 regb 4 b1111 endinitialfork 10val joinendmodule and or xor xnor xnor 归约操作符的操作数只有一个 对操作数的所有位进行位操作 结果只有一位 可以是0 1 X 2020 2 28 16 8 移位操作符 moduleshift reg 9 0 num num1 reg 7 0 rega regb initialrega 8 b00001100 initialfork 10num 3 num 00 0000 0001 20regb 3 regb 0000 0001 30num 2 rega 1111 1100 50num1 2 num1 00 1111 1100 60 finish joinendmodule 逻辑右移 逻辑左移 移位操作符对其左边的操作数进行向左或向右的位移位操作 第二个操作数 移位位数 是无符号数若第二个操作数是x或z则结果为x 在赋值语句中 如果右边 RHS 的结果 位宽大于左边 则把最高位截去位宽小于左边 则零扩展 将左边的操作数右移右边操作数指定的位数 建议 表达式左右位数一致 2020 2 28 17 9 关系操作符 modulerelationals reg 3 0 rega regb regc regval initialbeginrega 4 b0011 regb 4 b1010 regc 4 b0 x10 endinitialfork 10val regc rega val x 20val regb rega val 1 40val regb regc val 1 50 finish joinendmodule 大于 大于等于 小于等于 其结果是1 b1 1 b0或1 bx 2020 2 28 18 10 相等操作符 2 b1x 2 b0 x值为0 因为不相同2 b1x 2 b1x值为1 因为相同 a 2 b1x b 2 b1x if a b display aisequaltob else display aisnotequaltob a 2 b1x b 2 b1x if a b display aisidenticaltob else display aisnotidenticaltob Case等只能用于行为描述 不能用于数据流描述 2020 2 28 19 相等操作符 moduleequalities1 reg 3 0 rega regb regc regval initialbeginrega 4 b0011 regb 4 b1010 regc 4 b1x10 endinitialfork 10val rega regb val 0 20val rega regc val 1 30val regb regc val x 40val regc regc val x 50 finish joinendmodule 其结果是1 b1 1 b0或1 bx 如果左边及右边为确定值并且相等 则结果为1 如果左边及右边为确定值并且不相等 则结果为0 如果左边及右边有值不能确定的位 但值确定的位相等 则结果为x 的结果与 相反 值确定是指所有的位为0或1 不确定值是有值为x或z的位 2020 2 28 20 11 条件操作符 条件操作符的语法为 registger condition true value false value 其意思是 ifconditionisTRUE thenLHS 表达式1 elseLHS 表达式2 每个条件操作符必须有三个参数 缺少任何一个都会产生错误 最后一个操作数作为缺省值 上式中 若condition为真则register等于true value 若condition为假则register等于false value 一个很有意思的地方是 如果条件值不确定 且true value和false value不相等 则输出不确定值 例如 assignout sel 0 a b 若sel为0则out a 若sel为1则out b 如果sel为x或z 若a b 0 则out 0 若a b 则out值不确定 条件 2020 2 28 21 条件操作符 modulelikebufif in en out inputin inputen outputout assignout en 1 in bz endmodulemodulelike4to1 a b c d sel out inputa b c d input 1 0 sel outputout assignout sel 2 b00 a sel 2 b01 b sel 2 b10 c d endmodule 如果条件值为x或z 则结果可能为x或z 2020 2 28 22 12 级联操作符 级联 可以从不同的矢量中选择位并用它们组成一个新的矢量 用于位的重组和矢量构造 moduleconcatenation reg 7 0 rega regb regc regd reg 7 0 new initialbeginrega 8 b0000 0011 regb 8 b0000 0100 regc 8 b0001 1000 regd 8 b1110 0000 endinitialfork 10new regc 4 3 regd 7 5 regb 2 rega 1 0 new 8 b11111111 20 finish joinendmodule 在级联时 必须指定位数 否则将产生错误 下面是类似错误的例子 c 3 0 3 b011 b0 级联时不限定操作数的数目 在操作符符号 中 用逗号将操作数分开 例如 A B C D 2020 2 28 23 13 复制 复制 num 复制一个变量或在 中的值 modulereplicate reg 3 0 rega reg 1 0 regb regc reg 7 0 bus initialbeginrega 4 b1001 regb 2 b11 regc 2 b00 endinitialfork 10bus 4 regb bus 11111111 regbisreplicated4times 20bus 2 regb 2 regc bus 11110000 regcandregbareeach replicated andtheresultingvectors areconcatenatedtogether 30bus 4 rega 1 rega bus 00001001 regaissign extended 40 finish joinendmodule 前两个 符号之间的正整数指定复制次数 2020 2 28 24 4 3数据流设计实例 1 4选1数据选择器数据流建模 modulemux4 to 1 y d0 d1 d2 d3 s0 s1 端口声明outputy inputd0 d1 d2 d3 inputs0 s1 内部网线声明wirey0 y1 y2 y3 wires1 n s0 n 门级实例引用 生成s1 n和s0 nnot s1 n s1 not s0 n s0 调用三输入与门and y0 d0 s1 n s0 n and y1 d1 s1 n s0 and y2 d2 s1 s0 n and y3 d3 s1 s0 调用四输入或门or y y0 y1 y2 y3 endmodule 2020 2 28 25 a 使用逻辑等式 modulemux4 to 1 y d0 d1 d2 d3 s0 s1 端口声明outputy inputd0 d1 d2 d3 inputs0 s1 assigny s1endmodule 特点 使用逻辑等式代替门实例 区别仅仅在于输出y的计算是由操作符的逻辑方程完成的 而不是用门的实例引用完成的 改变的只是内部的实现方式 同门级实例引用相比 显然使用逻辑等式是非常简捷的 2020 2 28 26 b 使用条件操作符 modulemux4 to 1 y d0 d1 d2 d3 s0 s1 端口声明outputy inputd0 d1 d2 d3 inputs0 s1 assigny s1 s0 d3 d2 s0 d1 d0 endmodule 特点 使用条件操作符 可以实现与门级实例引用相同的功能 但从程序上看显然要简单的多 而且可读性增强 2020 2 28 27 2 4位全加器 在以前所举的例子中 四位全加器是用门级建模实现的 在门级建模中 我们首先实现的是一个一位全加器 然厉使用四个一位全加器组成四位脉动进位全加器 有两种方法完成数据流级建模 a 使用操作符 和 modulefulladd4 sum c out a b c in 端口声明output 3 0 sum outputc out input 3 0 a b inputc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论