数字系统设计 Digital System Design EE141 数字系统设计 Digital System Design -----Verilog HDL电路设计简介 王维东 Weidong Wang 浙江大学信息与电子工程学院 College of Information Science & Electronic Engineering 信息与通信工程研究所 Zhejiang University Spring 2016 ZDMC – Lec. #2
任课教师 王维东 TA: 浙江大学信息与电子工程学院, 信电楼306 邮箱:wdwang@zju.edu.cn EE141 任课教师 王维东 浙江大学信息与电子工程学院, 信电楼306 邮箱:wdwang@zju.edu.cn College of Information Science & Electronic Engineering Zhejiang University, Hangzhou, 310027 Tel: 86-571-87953170 (O) Mobile: 13605812196 TA: 陈彬彬 Binbin CHEN, 13071888906; 15091831397@163.com; 黄露 Lu HUANG,6719473; eliver8801@zju.edu.cn; Tuesday & Thursday 14:00-16:30 PM Office Hours:玉泉信电楼 308室(可以微信或邮件联系). Spring 2016 ZDMC – Lec. #2
Prerequisites预修课程 电子电路基础 电子线路 C语言 How to learn this Course? Not only listening, thinking and waiting …. But Exercise, Simulation, Practice!
课程简介 课程代码:111C0120 参考书 阎石, 数字电子技术基础, 第5版, 高等教育出版社, 2006. EE141 课程简介 课程代码:111C0120 参考书 阎石, 数字电子技术基础, 第5版, 高等教育出版社, 2006. 王金明著,数字系统设计与Verilog HDL,电子工业出版社,第5版 补充讲义/期中考试前预备 Stanford 大学 108A课程notes. R.H.Katz, G.Borriello, Contemporary Logic Design, second edition,电子工业出版社, 2005. M.M.Mano, 数字设计(第四版), 电子工业出版社, 2010. http://www.prenhall.com/mano Spring 2016 ZDMC – Lec. #2
Other Course Info Website: http://mypage.zju.edu.cn/wdwd/教学工作/ ftp://10.13.71.58/数字系统设计/2016/, 暂停 Check frequently 答疑 玉泉信电楼308室/周四下午2:30-5:00 上课课间、课后均可 Email,微信群,短信均可
Grading (考核) Final grades will be computed approximately as follows: 期中考试-10% 课程作业+小测验+上课出勤率+Project - 20% Class Room Check Homework Sets 作业上交截止期为课后一周内有效 Project 2 projects (1 or 2 members team) Project-2可选(总评加分3~5分,但不超过平时成绩范围) Finial Exam期末闭卷考试 - 70% 上课说明此门课程的成绩合成:平时成绩包括平时小测验、期中考试、作业、出勤、课堂讨论、论文
授课时间和地点: 2016年春夏学期, 地点:紫金港西1-520(多) 周二上午,第3、4节(9:50-11:25) 星期四上午,第1、2节(08:00-09:35) 地点:紫金港西1-520(多) http://mypage.zju.edu.cn/wdwd/教学工作/
课程结构 数字理论知识(必备) 数字电路分析与设计 脉冲电路与接口 控制器与数字系统 微处理器简介 数字系统和编码、逻辑代数、门电路 EE141 课程结构 数字理论知识(必备) 数字系统和编码、逻辑代数、门电路 数字电路分析与设计 组合逻辑电路 触发器、半导体存贮器、可编程器件 时序逻辑电路 脉冲电路与接口 控制器与数字系统 状态机 控制器 微码控制器 测试和验证 微处理器简介 Spring 2016 ZDMC – Lec. #2
----函数化简与数制码制
复习 常见十进制代码 有什么特点? 有什么用途? 8421码 余3码 2421码 5211码 余3循环码 Spring 2015 ZDMC – Lec. #1 – 28
复习 逻辑代数 Spring 2015 ZDMC – Lec. #1 – 28
公式(17)的证明 (公式推演法): A+BC=(A+B)(A+C) EE141 公式(17)的证明 (公式推演法): A+BC=(A+B)(A+C) Spring 2015 ZDMC – Lec. #1 – 28
逻辑函数的两种标准形式 最小项之和 最大项之积 EE141 逻辑函数的两种标准形式 最小项之和 最大项之积 最小项 m: m是乘积项 包含n个因子 n个变量均以原变量和反变量的形式在m中出现一次 编号 对于n变量函数 有2n个最小项 Spring 2015 ZDMC – Lec. #1 – 28
最大项的编号: 最大项 取值 对应 编号 A B C 十进制数 1 1 1 7 M7 1 1 0 6 M6 1 0 1 5 M5 1 0 0 EE141 最大项的编号: 最大项 取值 对应 编号 A B C 十进制数 1 1 1 7 M7 1 1 0 6 M6 1 0 1 5 M5 1 0 0 4 M4 0 1 1 3 M3 0 1 0 2 M2 0 0 1 1 M1 0 0 0 M0 Spring 2015 ZDMC – Lec. #1 – 28
EE141 最小项与最大项的关系 Spring 2015 ZDMC – Lec. #1 – 28
卡诺图化简法 逻辑函数的卡诺图表示法 实质:将逻辑函数的最小项之和的以图形的方式表示出来 EE141 卡诺图化简法 逻辑函数的卡诺图表示法 实质:将逻辑函数的最小项之和的以图形的方式表示出来 以2n个小方块分别代表 n 变量的所有最小项,并将它们排列成矩阵,而且使几何位置相邻的两个最小项在逻辑上也是相邻的(只有一个变量不同),就得到表示n变量全部最小项的卡诺图。 -------将n变量的全部最小项各用一个小方块表示,使相邻的最小项在几何位置上也相邻地排列…… Spring 2015 ZDMC – Lec. #1 – 28
具有无关项的逻辑函数及其化简 约束项、任意项和逻辑函数式中的无关项 EE141 具有无关项的逻辑函数及其化简 约束项、任意项和逻辑函数式中的无关项 在逻辑函数中,对输入变量取值的限制,在这些取值下为1的最小项称为约束项 约束项 任意项 逻辑函数中的无关项:约束项和任意项可以写入函数式,也可不包含在函数式中,因此统称为无关项。 在输入变量某些取值下,函数值为1或为0不影响逻辑电路的功能,在这些取值下为1的最小项称为任意项 Spring 2015 ZDMC – Lec. #1 – 28
复习 组合逻辑电路 Spring 2015 ZDMC – Lec. #1 – 28
组合逻辑电路的设计方法 一、逻辑抽象 二、写出函数的最简表达式 三、选定器件类型 四、根据所选器件: 用门电路 采用中等规模的集成块 EE141 组合逻辑电路的设计方法 一、逻辑抽象 分析因果关系,确定输入/输出变量 定义逻辑状态的含意(赋值) 列出定义输出和输入之间关系的真值表 二、写出函数的最简表达式 三、选定器件类型 四、根据所选器件: 用门电路 采用中等规模的集成块 进行相应的描述(HDL) 五、画出逻辑电路图并验证设计的正确性 Spring 2015 ZDMC – Lec. #1 – 28
若干常用组合逻辑电路 编码器 编码:将输入的每个高/低电平信号变成一个对应的二进制代码 普通编码器 优先编码器 EE141 若干常用组合逻辑电路 编码器 编码:将输入的每个高/低电平信号变成一个对应的二进制代码 普通编码器 优先编码器 Spring 2015 ZDMC – Lec. #1 – 28
EE141 复习 利用无关项化简,得: 任何时候只有一个输入时激活的,或有两个输入同时激活,则输入就会产生一个没有定义的组合。对于这个不确定因素,编码器必须建立优先机制,使得只有一个输出被编码。 Spring 2015 ZDMC – Lec. #1 – 28
译码器 译码:将每个输入的二进制代码译成对应的输出高、低电平信号。 常用的有:二进制译码器,二-十进制译码器,显示译码器等 一、二进制译码器 EE141 译码器 译码:将每个输入的二进制代码译成对应的输出高、低电平信号。 常用的有:二进制译码器,二-十进制译码器,显示译码器等 输 入 输 出 A2 A1 A0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 1 一、二进制译码器 例:3线—8线译码器 Spring 2015 ZDMC – Lec. #1 – 28
数据选择器 Multiplexers 数据选择器是从多路输入线中选择其中的一路到输出线的一种组合电路。 二选一数据选择器: 数据输入线D0-D1 选择线A0 输出线Y 电路图 表达式:Y=A0’D0+A0D1 Spring 2015 ZDMC – Lec. #1 – 28
EE141 CMOS传输门 复习 Spring 2015 ZDMC – Lec. #1 – 28
加法器:半加器Half Adder, HA 半加器,不考虑来自低位的进位,将两个1位的二进制数相加. EE141 加法器:半加器Half Adder, HA 半加器,不考虑来自低位的进位,将两个1位的二进制数相加. 我们指定符号S(for sum) and CO(for carry) to the outputs。 输入为A和B。 真值表the truth table 输 入 输 出 A B S CO 1 一个异或门和一个与门 Spring 2015 ZDMC – Lec. #1 – 28
全加器Full Adder, FA 将两个1位二进制数A,B及来自低位的进位CI相加 输 入 输 出 A B CI S CO 1 EE141 全加器Full Adder, FA 将两个1位二进制数A,B及来自低位的进位CI相加 输 入 输 出 A B CI S CO 1 74LS183 74HC183 Spring 2015 ZDMC – Lec. #1 – 28
两个半加器和1个或门实现全加器 FA HA1 HA2 CO S A B CI S S CO CO Spring 2015 ZDMC – Lec. #1 – 28
数值比较器 MAGNITUDE COMPARATOR EE141 数值比较器 MAGNITUDE COMPARATOR 用来比较两个二进制数的数值大小 一、1位数值比较器 A,B比较有三种可能结果 Spring 2015 ZDMC – Lec. #1 – 28
EE141 显示译码器 1. 七段字符显示器 如: Spring 2015 ZDMC – Lec. #1 – 28
组合逻辑电路中的竞争-冒险现象 竞争-冒险现象及成因 一、什么是“竞争” 两个输入“同时向相反的逻辑电平变化”,称存在“竞争” EE141 组合逻辑电路中的竞争-冒险现象 竞争-冒险现象及成因 一、什么是“竞争” 两个输入“同时向相反的逻辑电平变化”,称存在“竞争” 二、因“竞争”而可能在输出产 生尖峰脉冲的现象,称为 “竞争-冒险”。 Spring 2015 ZDMC – Lec. #1 – 28
4.4.2 检查竞争-冒险现象的方法 4.4.3 消除竞争-冒险现象的方法 一、接入滤波电容 尖峰脉冲很窄, 二、引入选通脉冲 EE141 4.4.2 检查竞争-冒险现象的方法 有可能的情况: Y=A+A’=10(A=0,A’慢;A’=0,A慢变)1; Y=A·A’=01(A=1,A’慢;A’=1,A慢变)0; 例:Y=AB+A’C 4.4.3 消除竞争-冒险现象的方法 一、接入滤波电容 尖峰脉冲很窄, 用很小的电容就可将尖峰削弱到 VTH 以下。 二、引入选通脉冲 取选通脉冲作用时间,在电路达到稳定之后, P的高电平期的输出信号不会出现尖峰。 Spring 2015 ZDMC – Lec. #1 – 28
EE141 三、修改逻辑设计 例: Spring 2015 ZDMC – Lec. #1 – 28
4.4 综合分析4-Bit Arithmetic Logic Unit (ALU) General Description: The 74LS181 is a 4-bit Arithmetic Logic Unit (ALU) which can perform all the possible 16 logic operations on two variables and a variety of arithmetic operations Features Provides 16 arithmetic operations: add, subtract, compare, double, plus twelve other arithmetic operations Provides all 16 logic operations of two variables: exclusive-OR, compare, AND, NAND, OR, NOR, plus ten other logic operations Full lookahead for high speed arithmetic operation on long words Operand Inputs: A’0–A’3/B’0–B’3 four Function Select inputs (S0–S3) Mode Control input (M): logic/arithmetic Carry Input (Cn)/Carry Output(Cn+4) Function Outputs(F’0–F’3) Comparator Output (A = B) Carry Generate Output(G’)/Carry Propagate Output(P’) Spring 2015 ZDMC – Lec. #1 – 28
第九章 硬件描述语言Verilog DHL简介 ------组合电路设计 EE141 第九章 硬件描述语言Verilog DHL简介 ------组合电路设计
EE141 概述 一、什么是Verilog HDL? Verilog HDL是一种应用广泛的硬件描述性语言,主要用于从算法级、门级到开关级的多种抽象层次的数字系统建模。 二、为什么要用Verilog HDL? 电子设计规模越来越大(普通设计已达几百万门的数量级) ,复杂度越来越高。有必要用高级语言来表达其功能,隐藏其具体的细节实现。 提高逻辑设计的效率,降低设计成本,更重要的是缩短设计同期。 可读性强,易修改。 Spring 2015 ZDMC – Lec. #1 – 28
Verilog HDL的基本结构: module adder8 (cout, sum, ina,inb, cin); EE141 Verilog HDL的基本结构: 简单的Verilog HDL的例子 准备实现的逻辑功能: 例1 一个8位加法器的Verilog HDL源代码 输入、输出端口描述 module adder8 (cout, sum, ina,inb, cin); output[7:0] sum; output cout; input[7:0] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule ∑ 8 ci co cin cout ina inb sum 程序为模块结构,包含在module与endmodule间 逻辑功能描述 问题:若要设计16位加法器,怎样修改? Spring 2015 ZDMC – Lec. #1 – 28
module counter8 (out, cout, data, load, cin, clk); output [7:0] out; EE141 例2 8位二进制加法计数器 module counter8 (out, cout, data, load, cin, clk); output [7:0] out; output cout; input load, cin, clk; input [7:0] data; reg [7:0] out; always @(posedge clk) begin if (load) out<= data;//置数 else out <= out + cin; //计数或保持 end assign cout=&out&cin; // 进位 endmodule 准备实现的 逻辑功能: 输入、输出端口描述 CTR8 M1 M2 G3 C4/2,3+ 8 3CT=255 1,4D load cin clk data out cout 逻辑功能描述 时钟上沿触发 Spring 2015 ZDMC – Lec. #1 – 28
Verilog HDL模块的结构 2.模块的结构 1.模块的概念 module <模块名>(<端口列表>) EE141 Verilog HDL模块的结构 2.模块的结构 1.模块的概念 module <模块名>(<端口列表>) 模块是Verilog HDL语言的基本单元,数字系统是用模块集合的形式来描述。 端口说明(input,output,inout) 参数定义(可选) 模块是描述某个设计的功能、结构和与其它模块通信的外部端口。 数据类型定义 //wire,reg,task,function 连续赋值语句(assign)//组合逻辑 过程块(always和initial) -行为描述语句 Verilog HDL中各个模块是并行运行。 模块可以调用其它模块的实例。 低层模块实例 //调用其它模块 任务和函数 延时说明块 endmodule Spring 2015 ZDMC – Lec. #1 – 28
语句的顺序执行与并行执行 一、assign语句之间:并行执行(同时执行) 二、过程块之间( always, initial ):并行执行 EE141 语句的顺序执行与并行执行 一、assign语句之间:并行执行(同时执行) 二、过程块之间( always, initial ):并行执行 三、 assign语句与过程块之间:并行执行 四、 过程块( always, initial )内部 非阻塞语句类似并行语句 串行块(begin-end):顺序执行 并行块(fork-join ):并行执行 Spring 2015 ZDMC – Lec. #1 – 28
6) 位运算符(~,|,^,&,^~) 1) ~ //取反 2) & //按位与 3) | //按位或 4) ^ //按位异或 5) ^~ //按位同或(异或非) 说明: • 位运算符中除了~是单目运算符以外,均为二目运算符,即要求运算符两侧各有一个操作数. • 位运算符中的二目运算符要求对两个操作数的相应位进行运算操作。 Spring 2015 ZDMC – Lec. #1 – 28
位拼接运算符(Concatation) 在Verilog HDL语言有一个特殊的运算符:位拼接运算符{}。用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。 其使用方法如下: {信号1的某几位,信号2的某几位,..,..,信号n的某几位} 即把某些信号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号。见下例: {a,b[3:0],w,3’b101} 也可以写成为 {a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1} 在位拼接表达式中不允许存在没有指明位数的信号。 位拼接还可以用重复法来简化表达式。见下例: {4{w}} //这等同于{w,w,w,w} 位拼接还可以用嵌套的方式来表达。见下例: {b,{3{a,b}}} //这等同于{b,a,b,a,b,a,b} Spring 2015 ZDMC – Lec. #1 – 28
缩减运算符(reduction operator) 缩减运算符是单目运算符,也有与或非运算。 例如: reg [3:0] B; reg C; C = &B; 相当于: C =( (B[0]&B[1]) & B[2] ) & B[3]; (1).非阻塞(Non_Blocking)赋值方式( 如 b <= a; ) 1) 块结束后才完成赋值操作。 2) b的值并不是立刻就改变的。 3) 这是一种比较常用的赋值方法。(特别在编写可综合模块时) (2).阻塞(Blocking)赋值方式( 如 b = a; ) 1) 赋值语句执行完后,块才结束。 2) b的值在赋值语句执行完后立刻就改变的。 3) 可能会产生意想不到的结果。 非阻塞赋值方式和阻塞赋值方式的区别常给设计人员带来问题。 Spring 2015 ZDMC – Lec. #1 – 28
常用组合电路的设计 & A B C D F G1 G2 G3 1.基本门电路的描述 方法1:调用门原语 EE141 常用组合电路的设计 1.基本门电路的描述 方法1:调用门原语 & ≥1 A B C D F F1 F2 G1 G2 G3 module gate1(F, A, B, C, D); input A, B, C, D; output F; wire F1,F2; nand G1 ( F1, A, B ); and G2 ( F2, B, C, D); or G3 ( F, F1, F2); endmodule 调用格式: 多输入门:原语名 < 例化名称> (输出,输入1,输入2……) 非门: 原语名 < 例化名称> (输出,输入) Spring 2015 ZDMC – Lec. #1 – 28
方法2:用assign连续赋值语句描述 & A B C D F 方法3:用过程赋值语句描述 module gate2(F,A,B,C,D); EE141 方法2:用assign连续赋值语句描述 module gate2(F,A,B,C,D); input A,B,C,D; output F; assign F=~(A & B)|(B & C & D); endmodule & ≥1 A B C D F F1 F2 逻辑表达式 方法3:用过程赋值语句描述 module gate3(F,A,B,C,D); input A,B,C,D; output F; reg F; always @(A or B or C or D) begin F=~(A & B) | (B & C & D); end endmodule 敏感信号表: 与同步时序电路差别? Spring 2015 ZDMC – Lec. #1 – 28
三态门 b1 in out oe Bufif1原语: in out en 例 用bufifl关键字描述的三态门 EN EE141 EN out in oe b1 三态门 例 用bufifl关键字描述的三态门 module tristate(in, oe, out); input in, oe; output out; tri out; //注意三态门端口的排列顺序 bufif1 b1(out, in, oe);//(输入,输出,使能) endmodule EN Bufif1原语: 例 用assign描述的三态门 module tri_1(out, in, en); output out; input in, en; assign out = en ? in : 1'bz; //若en = 1, out = in;若en = 0 ,out为高阻态 endmodule EN out in en Spring 2015 ZDMC – Lec. #1 – 28
例 用三态双向驱动器 双向端口 module bidir(tri_inout , out , in , en , b); EE141 例 用三态双向驱动器 双向端口 module bidir(tri_inout , out , in , en , b); inout tri_inout; output out; input in, en, b; assign tri_inout = en ? in : 1'bz;//三态门 assign out = tri_inout ^ b; endmodule EN in en =1 tri_inout out b Spring 2015 ZDMC – Lec. #1 – 28
译码器、编码器 3线_8线译码器(输出低电平有效) out0 out7 1 2 in0 in1 in2 BIN/OCT 01234567 EE141 译码器、编码器 3线_8线译码器(输出低电平有效) module edcoder_38(out, in); output[7:0] out; input[2:0] in; reg[7:0] out; always @(in) begin case(in) 3'd0: out = 8'b1111_1110; 3'd1: out = 8'b1111_1101; 3'd2: out = 8'b1111_1011; 3'd3: out = 8'b1111_0111; 3'd4: out = 8'b1110_1111; 3'd5: out = 8'b1101_1111; 3'd6: out = 8'b1011_1111; 3'd7: out = 8'b0111_1111; endcase end endmodule 01234567 out0 out7 BIN/OCT 1 2 in0 in1 in2 分隔符,便于阅读 真值表 Spring 2015 ZDMC – Lec. #1 – 28
8 线_ 3线高优先编码器 方法1:用if_else语句描述编码器 outcode1 outcode2 1 2 outcode0 EE141 8 线_ 3线高优先编码器 方法1:用if_else语句描述编码器 module encoder8_3(none_on,outcode,a, b, c, d, e, f, g, h); output[2:0] outcode; output none_on; input a, b, c, d, e, f, g, h; reg[3:0] outtemp; assign {none_on, outcode} = outtemp; always @(a or b or c or d or e or f or g or h) begin if(h) outtemp = 4'b0_111; else if(g) outtemp = 4'b0_110; else if(f ) outtemp = 4'b0_101; else if(e) outtemp = 4'b0_100; else if(d) outtemp = 4'b0_011; else if(c) outtemp = 4'b0_010; else if(b) outtemp = 4'b0_001; else if(a) outtemp = 4'b0_000; else outtemp = 4'b1_000; end endmodule 引进变量,便于描述 01234567 BIN/OCT outcode1 outcode2 abcdefgh 1 2 outcode0 none_on (输入无效) Spring 2015 ZDMC – Lec. #1 – 28
方法2:用case语句描述编码器 outcode1 outcode2 1 2 outcode0 none_on BIN/OCT EE141 方法2:用case语句描述编码器 module encoder_83(none_on,outcode,a, b, c, d, e, f, g, h); output[2:0] outcode; output none_on; input a, b, c, d, e, f, g, h; reg[3:0] outtemp; assign {none_on, outcode} = outtemp; always @(a or b or c or d or e or f or g or h) begin casex ({a, b, c, d, e, f, g, h}) 8'B????_???1 : outtemp=4'b0_111; 8'B????_??10 : outtemp=4'b0_110; 8'B????_?100 : outtemp=4'b0_101; 8'B????_1000 : outtemp=4'b0_100; 8'B???1_0000 : outtemp=4'b0_011; 8'B??10_0000 : outtemp=4'b0_010; 8'B?100_0000 : outtemp=4'b0_001; 8'B1000_0000 : outtemp=4'b0_000; 8'B0000_0000 : outtemp=4'b1_000; endcase end endmodule 01234567 BIN/OCT outcode1 outcode2 abcdefgh 1 2 outcode0 none_on (输入无效) Spring 2015 ZDMC – Lec. #1 – 28
数据选择器MUX 用assign语句设计2选1 MUX module mux2_1(out , a , b , sel); EE141 数据选择器MUX 用assign语句设计2选1 MUX module mux2_1(out , a , b , sel); output out; input a, b, sel; assign out = sel ? a : b; endmodule mux sel 1 b a out sel=1:out=a sel=0:out=b Spring 2015 ZDMC – Lec. #1 – 28
用if-else语句描述4选1 MUX mux sel0 G sel1 in0 8 in1 in2 out in3 EE141 用if-else语句描述4选1 MUX module mux4_1(out , in0 , in1 , in2 , in3 , sel); output out ; input[7:0] in0 , in1 , in2 , in3 ; input[1:0] sel; reg[7:0] out ; always @(in0 or in1 or in2 or in3 or sel) begin if(sel== 2'b00) out = in0; else if(sel == 2'b01) out = in1; else if(sel == 2'b10) out = in2; else out = in3; end endmodule mux 1 out G 3 sel0 8 sel1 2 in0 in1 in2 in3 Spring 2015 ZDMC – Lec. #1 – 28
用case语句描述4选1 MUX 共有8个4选1 MUX, mux sel0 G sel1 in0 8 in1 in2 out in3 EE141 用case语句描述4选1 MUX module mux_4_1(out , in0 , in1 , in2 , in3 , sel); output[7:0] out ; input[7:0] in0 , in1 , in2 , in3 ; input[1:0] sel; reg[7:0] out ; always @(in0 or in1 or in2 or in3 or sel) begin case(sel) 2'b00: out = in0; 2'b01: out = in1; 2'b10: out = in2; default: out = in3; endcase end endmodule 共有8个4选1 MUX, 它们共用sel信号 mux 1 out G 3 sel0 8 sel1 2 in0 in1 in2 in3 Spring 2015 ZDMC – Lec. #1 – 28
奇偶校验器 奇校验:输入数据“1”的个数为奇数。可用“异或”运算 偶校验:输入数据“1”的个数为偶数。可用“同或”运算 EE141 奇偶校验器 奇校验:输入数据“1”的个数为奇数。可用“异或”运算 偶校验:输入数据“1”的个数为偶数。可用“同或”运算 module parity(even_bit ,odd_bit , input_bus); output even_bit ,odd_bit ; input [7:0] input_bus; assign odd_bit = ^ input_bus; //产生奇校验位 assign even_bit = ~odd_bit; //产生偶校验位 endmodule Spring 2015 ZDMC – Lec. #1 – 28
BCD码-七段 译码器(共阴) a e c d b f g bcd/7seg 1 2 4 8 D0 D1 D2 D3 EE141 BCD码-七段 译码器(共阴) module decode4_7(a,b,c,d,e,f,g,D); output a,b,c,d,e,f,g; input[3:0] D; reg a,b,c,d,e,f,g; always @(D) begin case(D) 4'd0 : {a,b,c,d,e,f,g}=7'b1111110; 4'd1 : {a,b,c,d,e,f,g}=7'b0110000; 4'd2 : {a,b,c,d,e,f,g}=7'b1101101; 4'd3 : {a,b,c,d,e,f,g}=7'b1111001; 4'd4 : {a,b,c,d,e,f,g}=7'b0110011; 4'd5 : {a,b,c,d,e,f,g}=7'b1011011; 4'd6 : {a,b,c,d,e,f,g}=7'b1011111; 4'd7 : {a,b,c,d,e,f,g}=7'b1110000; 4'd8 : {a,b,c,d,e,f,g}=7'b1111111; 4'd9 : {a,b,c,d,e,f,g}=7'b1111011; default : {a,b,c,d,e,f,g}=7'bx; endcase end endmodule a e c d b f g bcd/7seg 1 2 4 8 D0 D1 D2 D3 Spring 2015 ZDMC – Lec. #1 – 28
运算电路 例:带进位的n位通用加法器 逻辑图 n ∑ ina sum inb cout co ci cin EE141 运算电路 例:带进位的n位通用加法器 module adder_n (cout, sum, ina,inb, cin); parameter n=16; output[n:1] sum; output cout; input[n:1] ina,inb; input cin; assign {cout,sum}=ina+inb+cin; endmodule 逻辑图 ∑ n ci co cin cout ina inb sum Winter 2013 ZDMC – Lec. #1 – 28
比较器 comp n ina inb P Q great equa Small EE141 比较器 module compare_n (great, equal, Small, ina, inb); parameter n=16; output great, equal, Small; input[n:1] ina,inb; assign great=(ina>inb); assign equal=(ina==inb); assign Small=(ina<inb); endmodule comp n ina inb P Q P>Q P=Q P<Q great equa Small Winter 2013 ZDMC – Lec. #1 – 28
课后作业 练习: 习题: 阅读: 第九章 Verilog参考书实例 编译工具 modelsim、MAXplus等 EE141 课后作业 练习: 编译工具 modelsim、MAXplus等 习题: HW4: P454/ -9.1, 9.2, 9.4; 阅读: 第九章 Verilog参考书实例 Winter 2013 ZDMC – Lec. #1 – 28