《三章组合辑电路设计ppt课件》由会员分享,可在线阅读,更多相关《三章组合辑电路设计ppt课件(86页珍藏版)》请在金锄头文库上搜索。
1、第3章 组合逻辑电路设计讨论主题:n3.1组合逻辑基础及并行语句三人表决器n3.2加法器电路 一位加法器n3.3 verilog过程译码器原理 3-8译码器n3.4数码管显示电路 七段显示译码器3.1 组合逻辑电路 表决器3.1 组合逻辑电路对比3.1 组合逻辑电路定义n组合逻辑含义: 电路任一时刻的输出状态只决定于该时刻各输入状态的组合,而与电路的原状态无关。组合电路就是由门电路组合而成,电路中没有记忆单元,没有反馈通路。3.1 组合逻辑建模方法n建模思路: 用语言表述出来:针对输入,总有确定的输出,输入一变化,输出就随之变化n建模规范: 1.过程(进程)之外,本来就是并行,直接建模 2.过
2、程(进程)之内:a.所有输入变化立刻变化。b.针对输入,输出有确定值 (绝对真经!)(绝对真经!)3.1 组合逻辑verilog描述module select(f,a,b,s); output f; input a,b,s; assign f=(a&(s)|(b&s);endmodule 3.1组合逻辑补充互补CMOS电路 3.1 二输入CMOS与非门电路 3.1二输入端CMOS或非门电路 3.1二输入CMOS异或门电路 3.2理解Verilog的并行语句n一般的程序设计语言是处理器按照顺序去执行的一些语句,硬件描述语言却是描述一个物理上可以客观存在的实际电路的语言。二者最本质的区别是Veri
3、log硬件描述语言有并行语句。n并行语句是硬件描述语言的基本特征,可以说正是因为并行语句的存在,才使其成为了真正的硬件描述语言。Verilog需要顺序语句 n第一是很多时序器件本身就是和时间相关的,比如D触发器,其原理就是“每当时钟上升延来临之后就把输入端的数据存入,并且放在输出端口,直到下一个时钟来临为止”。如果使用语言来描述一个器件符合上述原理,很明显需要用到时间先后的语法,而且在很多场合,使用顺序执行的语句可以有效的简化描述语言的数量,基于这个原因,描述有些电路结构需要使用顺序执行的语句。但是即使用顺序执行的语句描述出来了这种器件,也是在底层和其他器件并行处理的。n第二个原因就是为了仿真
4、验证, 3.2 加法器电路n真值表a1a2bc3.2 加法器电路n初识Verilogmodule adder (a, b, c); input1:0 a, b; output2:0 c; assign c=a+b; endmodule3.2 半加器n能对两个一位二进制数相加,求得其和值及进位的逻辑电路称为半加器。半加器的特点是:只考虑两个一位二进制数的相加,而不考虑来自低位进位的运算电路,称为半加器。任务7中设计的一位加法器级为半加器。3.2 全加器n一位二进制数相加不仅要考虑本位的加数与被加数,还要考虑低位的进位信号,而输出包括本位和以及向高位的进位信号,这就是通常所说的全加器。 3.2全加
5、器 3.2 多位加法器 3.2 比较 module adder (a, b, c);input1:0 a, b;output2:0 c;reg2:0 c; always(a,b)beginc=a+b;endendmodule3.2任务:n自己使用Verilog编写一个4位数加4位数的加法器。3.3 Verilog 过程及译码电路nAlways 过程语句nalways定义的过程块是一个电路,电路从上电开始就会一直执行;n (从代码一开始就执行,执行完了再回到过程块的最初来执行,周而复始,不会停止,直到代码执行完毕) 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; end3.3过程语句casecase(address) 0 : $display (It is 11:40PM); 1 : $display (I am feeling sleepy); 2 : $display (Let me skip this tutori
7、al); default : $display (Need to complete); endcase3.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; disable C
8、OUNT; end end endmodule3.3过程中的阻塞赋值与非阻塞赋值过程中的阻塞赋值与非阻塞赋值 n阻塞式 (blocking) 的操作符为 “ = ”n 非阻塞式 (non-blocking)的操作符为 “ = ”n 阻塞赋值和非阻塞赋值的基本区别是:阻塞赋值是顺序执行语句,而非阻塞赋值是并行执行语句。两种语句的含义不同,建模的应用也就不同。 3.3 对比module top(clk,a,c);input a,clk;output c;reg c,b;always ( posedge clk )beginb=a;=b;endendmodulemodule top(clk,a,c)
9、;input a,clk;output c;reg c,b;always ( posedge clk )beginb=a;c=b;endendmodule3.3译码器电路输入输入输出输出A BY0 Y1 Y2 Y30 01 0 0 00 10 1 0 01 00 0 1 01 10 0 0 12 2线线4 4线译码器真值表线译码器真值表逻辑函数:逻辑函数:2线线4线译码器电路线译码器电路3-8译码器电路重温设计过程n1. 文本编辑n2. 设定器件n3. 输入管脚n4. 综合、布局布线n5. 设定下载端口n6. 下载3.3实训 3-8译码器8-3译码器n能不能自己实现8-3译码器电路?3.5 三
10、态门电路输入信号双向信号输出信号rwco_dataout_datain_data1co_dataxco_data0out_dataout_dataout_data三态门电路结构单元 如果使能端G为低电平,取值为0时,三态门电路与B点之间连接的两个MOS管都关断,B在芯片内部的连接处于高阻态,也就是为Z,此时外部信号可以通过B送到C,作为输入状态。当G为低高平,取值为1时,三态门电路与B连接的两个MOS管中可以有一个管子导通,B的取值和A一致,而此时外部对B不能进行信号驱动,否则就会出现短路。 CMOS传输门三态门电路 3.4 数码管显示3.4 练习一 数码管上显示2module seg7(da
11、ta_out); output7:0 data_out; assign data_out=8b 1011011 3.4 七段译码器结构七段LED数码管显示电路in0dg3.4表格显示七段数码管显示电路输入七段数码管显示电路输出LED显示字形in3 in2 in1 in0gfedcba 0 0 0 001111110 0 0 0 100001101 0 0 1 010110112 0 0 1 110011113 0 1 0 011001104 0 1 0 111011015 0 1 1 011111006 0 1 1 100001117 1 0 0 011111118 1 0 0 1110011
12、193.4 代码module qiduan(data_in,/七段数码管显示电路的输入,对应图2.1.4中的in3-in0,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_inbegin case(data_in)/输入的不同情况 4b0000: data_out = 7b0111111; / 0 4b0001:
13、 data_out = 7b0000110; / 1 4b0010: data_out = 7b1011011; / 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 d
14、efault: data_out = 7b0000000; /default,当输入为其他值时,输出有效,为全0 endcaseendendmodule3.4实训显示小任务:n使用七段数码管显示一个3的数字。nmodule SEG7 (nabcdefg, nscan n);nwire 3:0 bin;noutput3:0 scan;noutput6:0 abcdefg;nreg 6:0 abcdefg;assign scan=4b1111;always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . default: abcdefg=
15、7b0000000; endcase end endmodule3.4任务:用数码管显示9527需要轮流打开4个数码管,每个数码管显示1/4的时间,由于视觉暂留效应,就好像显示4个不同的数字设计思路:1.打开scan0的时候,在abcdefg线上赋值“9”2.打开scan1的时候,在abcdefg线上赋值“5”3.打开scan2的时候,在abcdefg线上赋值“2”4.打开scan3的时候,在abcdefg线上赋值“7”设计SCAN信号n首先要降低扫描速度,生成一个大约为0.01s-0.1s的时钟n利用这个时钟信号产生一个scan信号如下:reg1:0 state; reg3:0 scan;/
16、注意要用always就必须是regalways(posedge clk_div)state=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,否则用regalways(state)case (state)2b00 : bin=4d9;2b01 : bin=
17、4d5;2b10 : bin=4d2;2b11 : bin=4d7;default: bin=4d0;endcase再对9527从二进制到abdcdefg译码reg6:0 abcdefg;always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcase2.项目任务:计数牌子n任务分析: 设计一个计数牌子,能从0000计数到9999,每隔1秒钟跳动一下。通过复位可以把系统清零为0000涉及:动态数码管显示,复位,分频电路等n设计思路:1.内部所有数据都是2进制的,所以需
18、要设计4个4位2进制的reg,分别对应显示的4个数字,再通过动态扫描电路送到LED上面去显示。2.利用1秒的时钟,构建“个、十、百、千”位的变换规律 设计模块1:分频电路n代码:略1.产生一个1秒的时钟:clk_1s2.产生一个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_1
19、s)if(reset=1b1) shiwei=4b0;else if(gewei=4d9) begin if(shiwei=4d9); shiwei=4b0; else shiwei=shiwei+1b1;endreg3:0 baiwei/十位数always(posedge clk_1s)if(reset=1b1) baiwei=4b0;else if(gewei=4d9)&(shiwei=4d9) begin if(baiwei=4d9); baiwei=4b0; else baiwei=baiwei+1b1;endreg3:0 qianwei/十位数always(posedge clk_1
20、s)if(reset=1b1) qianwei=4b0;else if(gewei=4d9)&(shiwei=4d9)&(baiwei=4d9) begin if(qianwei=4d9); qianwei=4b0; else qianwei=shiwei+1b1;end设计模块3:动态译码显示n复习一下:我们是如何把9527显示出来的设计SCAN信号n首先要降低扫描速度,生成一个大约为0.01s-0.1s的时钟n利用这个时钟信号产生一个scan信号如下:reg1:0 state; reg3:0 scan;/注意要用always就必须是regalways(posedge clk_div)sta
21、te=stats+1b1;always (counter)case (counter)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,否则用regalways(counter)case (counter)2b00 : bin=4d9;2b01 : bin=4d5;2b10 : bin=4d2;2b11 : bin=4d7;d
22、efault: bin=4d0;endcase再对9527从二进制到abdcdefg译码reg6:0 abcdefg;always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcasen原来:在counter分别为00、01、10、11的时候在abcdefg上放置9、5、2、7n现在:在counter分别为00、01、10、11的时候在abcdefg上放置qianwei、baiwei、shiwei、gewei3.简易电子手表设计n项目分析: 设计一个电子手表,其功能能包
23、括复位后显示 15:34 能够正确显示时间hh mm系统架构图分频器分频器345160进制,6位2进制数23进制5位2进制数1分钟的时钟二进制到BCD译码二进制到BCD译码BCD码到7段数码管译码电路,动态显示设计模块1:分频电路n代码:略1.产生一个1分钟的时钟:clk_1m2.产生一个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 =
24、minute +1b1;reg4:0 hour/小时always(posedge clk_1m)if(reset=1b1) hour =5d15;/初始化为15点else if(minute =6d59)/满足1小时 begin if(hour =5d23);/满23小时 hour=5b0; else hour = hour +1b1;end复习:BCD码转换电路nBinary-Coded Decimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。 nBCD-8421举例子:二进制 十进制 BCD 0 0 0 110 6 1
25、10 1001 9 1001 1101 13 0001 0011 1011111 95 1001 0101小练习BCD码转换n1.110011n2.100100n3.1010101n4.101100n5.101000001010任务:自己写一个0到99(1100011)的二进制到BCD转化电路提示:n需要应用“比较器来”确定十位上数字是多少?n确定了十位数后,用减掉一个这个十位数,得到个位数,再做各位数的BCD码转换设计部件2:8位二进制到BCD码译码器电路nhour与minute都是小于99的binary 数,所以分别分别可以转化为8位BCD数。n设定BCD数结果分别为hour_bcd ,
26、minute_bcd设计部件3:动态数码显示输出n现在,我们拥有2个8位的BCD码数据,hour_bcd , minute_bcd。n把它们拆分成为4个4进制的BCD码数据: hour_bcd 7:4, hour_bcd 3:0, minute_bcd 7:4, minute_bcd 3:0。设计SCAN信号n首先要降低扫描速度,生成一个大约为0.01s-0.1s的时钟n利用这个时钟信号产生一个scan信号如下:reg1:0 state; reg3:0 scan;/注意要用always就必须是regalways(posedge clk_div)state=stats+1b1;always (c
27、ounter)case (counter)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,否则用regalways(counter)case (counter)2b00 : bin=4d9;2b01 : bin=4d5;2b10 : bin=4d2;2b11 : bin=4d7;default: bin=4d0;endcas
28、e再对9527从二进制到abdcdefg译码reg6:0 abcdefg;always(bin) begin case(bin) 4b0000: abcdefg= 7b0111111; . . default: abcdefg= 7b0000000; endcasen原来:在counter分别为00、01、10、11的时候在abcdefg上放置9、5、2、7n现在:在counter分别为00、01、10、11的时候在abcdefg上放置hour_bcd 7:4, hour_bcd 3:0, minute_bcd 7:4, minute_bcd 3:0。2.多路选择器电路n 多路选择器(MUX)
29、又叫多路开关(WUX),是一个选择器来的,它从多路数据输入中选择一路致输出端。详细看以下图形,即四选一多路选择器,就会明白的。它是四个二进制数据值作为多路选择器的输入,两个选择控制信号决定四个输入中哪个被传到输出端。 其中,(b)和(c)分别表示高电平有效选通信号(启动信号)和低电平有效的四选一多路选择器及它们的真值表。 问题,做一个4选1的多路选择器,要几个2选1的多路选择器?原来是3个设计一个多路选择器结构如下:控制端:00全灭11全亮10选择第一路01选择第二路3.分歧终端机课后练习n设计要求: 首先甲拨码一个数据,然后乙拨码一个数据,然后当裁判按下“开”的时候结果就显示在LED上(结果
30、有3种,甲胜利,乙胜利,平手)00-石头01-剪子10-布11-放弃胜利n任务分析:组合逻辑电路,输入有:裁判判决显示甲的选择(2位)乙的选择(2位)输出有:仲裁结果(3位)5.BCD码转换电路nBinary-Coded Decimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。 nBCD-8421举例子:二进制 十进制 BCD 0 0 0 110 6 110 1001 9 1001 1101 13 0001 0011 1011111 95 1001 0101小练习BCD码转换n1.110011n2.100100n3.1010101n4.101100n5.101000001010