三章组合逻辑电路设计ppt课件.ppt

上传人:本田雅阁 文档编号:2626659 上传时间:2019-04-23 格式:PPT 页数:86 大小:1.70MB
返回 下载 相关 举报
三章组合逻辑电路设计ppt课件.ppt_第1页
第1页 / 共86页
三章组合逻辑电路设计ppt课件.ppt_第2页
第2页 / 共86页
三章组合逻辑电路设计ppt课件.ppt_第3页
第3页 / 共86页
三章组合逻辑电路设计ppt课件.ppt_第4页
第4页 / 共86页
三章组合逻辑电路设计ppt课件.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《三章组合逻辑电路设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《三章组合逻辑电路设计ppt课件.ppt(86页珍藏版)》请在三一文库上搜索。

1、第3章 组合逻辑电路设计,讨论主题:,3.1组合逻辑基础及并行语句三人表决器 3.2加法器电路 一位加法器 3.3 verilog过程译码器原理 3-8译码器 3.4数码管显示电路 七段显示译码器,3.1 组合逻辑电路 表决器,3.1 组合逻辑电路对比,3.1 组合逻辑电路定义,组合逻辑含义: 电路任一时刻的输出状态只决定于该时刻各输入状态的组合,而与电路的原状态无关。组合电路就是由门电路组合而成,电路中没有记忆单元,没有反馈通路。,3.1 组合逻辑建模方法,建模思路: 用语言表述出来:针对输入,总有确定的输出,输入一变化,输出就随之变化 建模规范: 1.过程(进程)之外,本来就是并行,直接建

2、模 2.过程(进程)之内:a.所有输入变化立刻变化。b.针对输入,输出有确定值 (绝对真经!),3.1 组合逻辑verilog描述,module select(f,a,b,s); output f; input a,b,s; assign f=(a endmodule,3.1组合逻辑补充互补CMOS电路,3.1 二输入CMOS与非门电路,3.1二输入端CMOS或非门电路,3.1二输入CMOS异或门电路,3.2理解Verilog的并行语句,一般的程序设计语言是处理器按照顺序去执行的一些语句,硬件描述语言却是描述一个物理上可以客观存在的实际电路的语言。二者最本质的区别是Verilog硬件描述语言有

3、并行语句。 并行语句是硬件描述语言的基本特征,可以说正是因为并行语句的存在,才使其成为了真正的硬件描述语言。,Verilog需要顺序语句,第一是很多时序器件本身就是和时间相关的,比如D触发器,其原理就是“每当时钟上升延来临之后就把输入端的数据存入,并且放在输出端口,直到下一个时钟来临为止”。如果使用语言来描述一个器件符合上述原理,很明显需要用到时间先后的语法,而且在很多场合,使用顺序执行的语句可以有效的简化描述语言的数量,基于这个原因,描述有些电路结构需要使用顺序执行的语句。但是即使用顺序执行的语句描述出来了这种器件,也是在底层和其他器件并行处理的。 第二个原因就是为了仿真验证,,3.2 加法

4、器电路,真值表,3.2 加法器电路,初识Verilog module adder (a, b, c); input1:0 a, b; output2:0 c; assign c=a+b; endmodule,3.2 半加器,能对两个一位二进制数相加,求得其和值及进位的逻辑电路称为半加器。半加器的特点是:只考虑两个一位二进制数的相加,而不考虑来自低位进位的运算电路,称为半加器。任务7中设计的一位加法器级为半加器。,3.2 全加器,一位二进制数相加不仅要考虑本位的加数与被加数,还要考虑低位的进位信号,而输出包括本位和以及向高位的进位信号,这就是通常所说的全加器。,3.2全加器,3.2 多位加法器,

5、3.2 比较,module adder (a, b, c); input1:0 a, b; output2:0 c; reg2:0 c; always(a,b) begin c=a+b; end endmodule,3.2任务:,自己使用Verilog编写一个4位数加4位数的加法器。,3.3 Verilog 过程及译码电路,Always 过程语句 always定义的过程块是一个电路,电路从上电开始就会一直执行; (从代码一开始就执行,执行完了再回到过程块的最初来执行,周而复始,不会停止,直到代码执行完毕),3.3 常用过程语句 if else,/ “begin” 和 “end”就好比C语言中的

6、“”和“”. if (enable = = 1b1) begin data = 10; / 十进制赋值 address = 16hDEAD; /十六进制 wr_enable = 1b1; /二进制 end else begin data = 32b0; wr_enable = 1b0; address = address + 1; end,3.3过程语句case,case(address) 0 : $display (“It is 11:40PM“); 1 : $display (“I am feeling sleepy“); 2 : $display (“Let me skip this t

7、utorial“); default : $display (“Need to complete“); endcase,3.3过程语句while,module counter (clock,rst,enable,count); input clock, rst, enable; output 3:0 count; reg 3:0 count; always (posedge clock or posedge rst) if (rst) begin count = 0; end else begin : COUNT while (enable) begin count = count + 1;

8、disable COUNT; end end endmodule,3.3过程中的阻塞赋值与非阻塞赋值,阻塞式 (blocking) 的操作符为 “ = ” 非阻塞式 (non-blocking)的操作符为 “ = ” 阻塞赋值和非阻塞赋值的基本区别是:阻塞赋值是顺序执行语句,而非阻塞赋值是并行执行语句。两种语句的含义不同,建模的应用也就不同。,3.3 对比,module top(clk,a, c); input a,clk; output c; reg c,b; always ( posedge clk ) begin b=a; =b; end endmodule,module top(clk

9、,a,c); input a,clk; output c; reg c,b; always ( posedge clk ) begin b=a; c=b; end endmodule,3.3译码器电路,2线4线译码器真值表,逻辑函数:,2线4线译码器电路,3-8译码器电路,重温设计过程,1. 文本编辑 2. 设定器件 3. 输入管脚 4. 综合、布局布线 5. 设定下载端口 6. 下载,3.3实训 3-8译码器,8-3译码器,能不能自己实现8-3译码器电路?,3.5 三态门电路,三态门电路结构单元,如果使能端G为低电平,取值为0时,三态门电路与B点之间连接的两个MOS管都关断,B在芯片内部的连

10、接处于高阻态,也就是为Z,此时外部信号可以通过B送到C,作为输入状态。当G为低高平,取值为1时,三态门电路与B连接的两个MOS管中可以有一个管子导通,B的取值和A一致,而此时外部对B不能进行信号驱动,否则就会出现短路。,CMOS传输门三态门电路,3.4 数码管显示,3.4 练习一 数码管上显示2,module seg7(data_out); output7:0 data_out; assign data_out=8b 1011011,3.4 七段译码器结构,3.4表格显示,3.4 代码,module qiduan( data_in,/七段数码管显示电路的输入,对应图2.1.4中的in3-in0

11、,in3对应输入的高位 data_out);/七段数码管显示电路的输出,对应图2.1.4中的g-a,g对应输出的高位 input3:0 data_in;/输入输出端口定义 output6:0 data_out; reg6:0 data_out;/使用always建模组合逻辑需要定义输出为寄存器 always(data_in) /输入为data_in begin case(data_in)/输入的不同情况 4b0000: data_out = 7b0111111; / 0 4b0001: data_out = 7b0000110; / 1 4b0010: data_out = 7b1011011

12、; / 2 4b0011: data_out = 7b1001111; / 3 4b0100: data_out = 7b1100110; / 4 4b0101: data_out = 7b1101101; / 5 4b0110: data_out = 7b1111100; / 6 4b0111: data_out = 7b0000111; / 7 4b1000: data_out = 7b1111111; / 8 4b1001: data_out = 7b1100111; / 9 default: data_out = 7b0000000; /default,当输入为其他值时,输出有效,为全

13、0 endcase end endmodule,3.4实训显示小任务:,使用七段数码管显示一个3的数字。,module SEG7 ( abcdefg, scan ); wire 3:0 bin; output3:0 scan; output6:0 abcdefg; reg 6:0 abcdefg;,assign scan=4b1111; always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcase end endmodule,3.4任务:用数码管显示9527,需要

14、轮流打开4个数码管,每个数码管显示1/4的时间,由于视觉暂留效应,就好像显示4个不同的数字,设计思路: 1.打开scan0的时候,在abcdefg线上赋值“9” 2.打开scan1的时候,在abcdefg线上赋值“5” 3.打开scan2的时候,在abcdefg线上赋值“2” 4.打开scan3的时候,在abcdefg线上赋值“7”,设计SCAN信号,首先要降低扫描速度,生成一个大约为0.01s-0.1s的时钟 利用这个时钟信号产生一个scan信号如下: reg1:0 state; reg3:0 scan;/注意要用always就必须是reg always(posedge clk_div) s

15、tate=stats+1b1;,always (state) case (state) 2b00 : scan=4b0001; 2b01 : scan =4b0010; 2b10 : scan =4b0100; 2b11 : scan =4b1000; default: scan =4b0000; endcase,分不同的时间把9、5、2、7放到bin上面去,reg3:0 bin;/不在always里面赋值就用wire,否则用reg always(state) case (state) 2b00 : bin=4d9; 2b01 : bin=4d5; 2b10 : bin=4d2; 2b11 :

16、 bin=4d7; default: bin=4d0; endcase,再对9527从二进制到abdcdefg译码,reg6:0 abcdefg; always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcase,2.项目任务:计数牌子,任务分析: 设计一个计数牌子,能从0000计数到9999,每隔1秒钟跳动一下。通过复位可以把系统清零为0000 涉及: 动态数码管显示,复位,分频电路等,设计思路: 1.内部所有数据都是2进制的,所以需要设计4个4位2进制的reg,分

17、别对应显示的4个数字,再通过动态扫描电路送到LED上面去显示。 2.利用1秒的时钟,构建“个、十、百、千”位的变换规律,设计模块1:分频电路,代码:略 1.产生一个1秒的时钟:clk_1s 2.产生一个0.01秒的时钟(为了动态显示使用):clk_div,设计模块2:计数器,reg3:0 gewei/各位数 always(posedge clk_1s) if(reset=1b1) gewei=4b0; else if(gewei=4d9) gewei=4b0; else gewei=gewei+1b1;,reg3:0 shiwei/十位数 always(posedge clk_1s) if(r

18、eset=1b1) shiwei=4b0; else if(gewei=4d9) begin if(shiwei=4d9); shiwei=4b0; else shiwei=shiwei+1b1; end,reg3:0 baiwei/十位数 always(posedge clk_1s) if(reset=1b1) baiwei=4b0; else if(gewei=4d9) end,reg3:0 qianwei/十位数 always(posedge clk_1s) if(reset=1b1) qianwei=4b0; else if(gewei=4d9) end,设计模块3:动态译码显示,复习

19、一下: 我们是如何把9527显示出来的,设计SCAN信号,首先要降低扫描速度,生成一个大约为0.01s-0.1s的时钟 利用这个时钟信号产生一个scan信号如下: reg1:0 state; reg3:0 scan;/注意要用always就必须是reg always(posedge clk_div) state=stats+1b1;,always (counter) case (counter) 2b00 : scan=4b0001; 2b01 : scan =4b0010; 2b10 : scan =4b0100; 2b11 : scan =4b1000; default: scan =4b

20、0000; endcase,分不同的时间把9、5、2、7放到bin上面去,reg3:0 bin;/不在always里面赋值就用wire,否则用reg always(counter) case (counter) 2b00 : bin=4d9; 2b01 : bin=4d5; 2b10 : bin=4d2; 2b11 : bin=4d7; default: bin=4d0; endcase,再对9527从二进制到abdcdefg译码,reg6:0 abcdefg; always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . defaul

21、t: abcdefg= 7b0000000; endcase,原来:在counter分别为00、01、10、11的时候在abcdefg上放置9、5、2、7 现在:在counter分别为00、01、10、11的时候在abcdefg上放置qianwei、baiwei、shiwei、gewei,3.简易电子手表设计,项目分析: 设计一个电子手表,其功能能包括复位后显示 15:34 能够正确显示时间hh mm,系统架构图,分频器,3,4,5,1,60进制,6位2进制数,23进制 5位2进制数,1分钟的时钟,二进制到 BCD译码,二进制到 BCD译码,BCD码 到7段数 码管译 码电路, 动态显示,设计

22、模块1:分频电路,代码:略 1.产生一个1分钟的时钟:clk_1m 2.产生一个0.01秒的时钟(为了动态显示使用):clk_div,设计部件2:计时器,reg5:0 minute/分钟 always(posedge clk_1m) if(reset=1b1) minute =6d34;/显示34分 else if(minute =6d59) minute =6b0; else minute = minute +1b1;,reg4:0 hour/小时 always(posedge clk_1m) if(reset=1b1) hour =5d15;/初始化为15点 else if(minute

23、=6d59)/满足1小时 begin if(hour =5d23);/满23小时 hour=5b0; else hour = hour +1b1; end,复习:BCD码转换电路,Binary-Coded Decimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。 BCD-8421举例子: 二进制 十进制 BCD 0 0 0 110 6 110 1001 9 1001 1101 13 0001 0011 1011111 95 1001 0101,小练习BCD码转换,1.110011 2.100100 3.1010101 4.

24、101100 5.101000001010,任务:自己写一个0到99(1100011)的二进制到BCD转化电路,提示: 需要应用“比较器来”确定十位上数字是多少? 确定了十位数后,用减掉一个这个十位数,得到个位数,再做各位数的BCD码转换,设计部件2:8位二进制到BCD码译码器电路,hour与minute都是小于99的binary 数,所以分别可以转化为8位BCD数。 设定BCD数结果分别为hour_bcd , minute_bcd,设计部件3:动态数码显示输出,现在,我们拥有2个8位的BCD码数据,hour_bcd , minute_bcd。 把它们拆分成为4个4进制的BCD码数据: hou

25、r_bcd 7:4, hour_bcd 3:0, minute_bcd 7:4, minute_bcd 3:0。,设计SCAN信号,首先要降低扫描速度,生成一个大约为0.01s-0.1s的时钟 利用这个时钟信号产生一个scan信号如下: reg1:0 state; reg3:0 scan;/注意要用always就必须是reg always(posedge clk_div) state=stats+1b1;,always (counter) case (counter) 2b00 : scan=4b0001; 2b01 : scan =4b0010; 2b10 : scan =4b0100; 2

26、b11 : scan =4b1000; default: scan =4b0000; endcase,分不同的时间把9、5、2、7放到bin上面去,reg3:0 bin;/不在always里面赋值就用wire,否则用reg always(counter) case (counter) 2b00 : bin=4d9; 2b01 : bin=4d5; 2b10 : bin=4d2; 2b11 : bin=4d7; default: bin=4d0; endcase,再对9527从二进制到abdcdefg译码,reg6:0 abcdefg; always(bin) begin case(bin) 4

27、b0000: abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcase,原来:在counter分别为00、01、10、11的时候在abcdefg上放置9、5、2、7 现在:在counter分别为00、01、10、11的时候在abcdefg上放置hour_bcd 7:4, hour_bcd 3:0, minute_bcd 7:4, minute_bcd 3:0。,2.多路选择器电路,多路选择器(MUX)又叫多路开关(WUX),是一个选择器来的,它从多路数据输入中选择一路致输出端。详细看以下图形,即四选一多路选择器,就会明白的。它是四

28、个二进制数据值作为多路选择器的输入,两个选择控制信号决定四个输入中哪个被传到输出端。 其中,(b)和(c)分别表示高电平有效选通信号(启动信号)和低电平有效的四选一多路选择器及它们的真值表。,问题,做一个4选1的多路选择器,要几个2选1的多路选择器?,原来是3个,设计一个多路选择器结构如下:,控制端: 00全灭 11全亮 10选择第一路 01选择第二路,3.分歧终端机课后练习,设计要求: 首先甲拨码一个数据,然后乙拨码一个数据,然后当裁判按下“开”的时候结果就显示在LED上(结果有3种,甲胜利,乙胜利,平手) 00-石头 01-剪子 10-布 11-放弃胜利,任务分析: 组合逻辑电路,输入有: 裁判判决显示 甲的选择(2位) 乙的选择(2位) 输出有:仲裁结果(3位),5.BCD码转换电路,Binary-Coded Decimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。 BCD-8421举例子: 二进制 十进制 BCD 0 0 0 110 6 110 1001 9 1001 1101 13 0001 0011 1011111 95 1001 0101,小练习BCD码转换,1.110011 2.100100 3.1010101 4.101100 5.101000001010,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1