版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7章章 常用单元电路的常用单元电路的VHDL程程序设计序设计 门电路门电路 编码器编码器 译码器译码器 多路选择器多路选择器 比较器比较器第第7章章 常用单元电路程常用单元电路程VHDL序设计序设计详见第详见第5章章3 七段显示译码器是对一个七段显示译码器是对一个4 4位二进制数进行译码,并在七段显示器上显位二进制数进行译码,并在七段显示器上显示出相应的十进制数。一个七段显示译码器的设计方框图如图所示。根据示出相应的十进制数。一个七段显示译码器的设计方框图如图所示。根据图可知,输入信号图可知,输入信号D3D3、D2D2、D1D1、D0D0是二进制是二进制BCDBCD码的集合,可表示为码的集
2、合,可表示为D3D0D3D0。输出信号。输出信号a a、b b、c c、d d、e e、f f、g g也是用二进制数表示,为书写代也是用二进制数表示,为书写代码方便起见,输出信号用码方便起见,输出信号用x x的集合来表示。的集合来表示。 七 段译 码 器b(X5)a(X6)c(X4)d(X3)e(X2)f(X1)g(X0)D0D1D2D3abcfedg七 段 数 码 管 一、七段显示译码器 4Library ieee;Use ieee.std_logic_1164.all;Entity decoder is port(d:in std_logic_vector(3 downto 0); x:o
3、ut std_logic_vector(7 downto 0);End decoder;Architecture one of decoder is begin with d select x = “11111100” when “0000”, “01100000” when “0001”, “11011010” when “0010”, “11110010” when “0011”, “01100110” when “0100”, “10110110” when “0101”, “10111110” when “0110”, “11100000” when “0111”, “11111110
4、” when “1000”, “11110110” when “1001”, “00000000” when others;end one;此译码器驱动此译码器驱动共阴极数码管共阴极数码管二、译码器二、译码器Library ieee;Use ieee.std_logic_1164.all;Entity decoder is port(d:in std_logic_vector(2 downto 0); y:out std_logic_vector(7 downto 0);End decoder;Architecture one of decoder is begin with d select
5、 x = “11111110” when “000”, “11111101” when “001”, “11111011” when “010”, “11110111” when “011”, “11101111” when “100”, “11011111” when “101”, “10111111” when “110”, “01111111” when “111”, “11111111” when others;end one;三、二三、二-十进制十进制BCD译码器译码器 将BCD码转换为十进制码 10008 101010 110012【例例7.3】二二-十进制十进制BCD译码器译码器
6、ENTITY bcdm ISPORT(din: IN INTEGER RANGE 15 DOWNTO 0; a,b: OUT INTEGER RANGE 9 DOWNTO 0);END;ARCHITECTURE a OF bcdm ISBEGIN PROCESS(din) BEGIN IF din10 THEN a=din; b=0; ELSE a=din-10; b=1; END IF; END PROCESS;END;9加数被加数低位进位和溢出进位Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all
7、;Entity adder4b is port(cin: in std_logic; a,b:in std_logic_vector(3 downto 0); s:out std_logic_vector(3 downto 0);End adder4b;Architecture behav of adder4b is signal sint:std_logic_vector(4 downto 0); signal aa,bb:std_logic_vector(4 downto 0); Begin aa=0&a; bb=0&b; sint=aa+bb+cin; s=sint(3 downto 0
8、); cout=sint(4);End behav;4位加法器例程位加法器例程算术运算符算术运算符“+”只适只适合整数的数据类型,合整数的数据类型,因此加载了函数库因此加载了函数库 三、寄存器三、寄存器u 移位寄存器移位寄存器 8位位双双向移位寄存器向移位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY rlshift IS PORT(clr,lod,clk,s,dir,dil: IN BIT; d: IN BIT_vector(7 downto 0); q: BUFFER BIT_vector (7 DOWNTO 0);END rlshif
9、t;clrlodclksdirdild7.0q7.0rlshiftinst异步清零、同步置数,异步清零、同步置数,可左移可右移的移位寄可左移可右移的移位寄存器存器ARCHITECTURE rtl OF rlshift IS SIGNAL q_temp:BIT_vector(7 downto 0); BEGIN PROCESS(clr,clk,lod,s,dir,dil)lod是同步方式此是同步方式此处处可去掉可去掉 BEGIN IF clr=0THEN q_temp=“00000000”; elsif clkevent and clk=1 then if (lod=1) then q_temp
10、=d; elsif (s=1) then for i IN 7 DOWNTO 1 LOOP q_temp(i-1)=q(i); end loop; q_temp(7)=dir; else for i IN 0 to 6 LOOP q_temp(i+1)=q(i); end loop; q_temp(0)=dil; end if; End if; q=q_temp;END PROCESS;END rtl;由于采用了由于采用了q_temp缓冲器,缓冲器,q的各位数的各位数值才没被替换。值才没被替换。【例例】-同步复位可左移输入、右移输入,并行输入的四位移位寄存器同步复位可左移输入、右移输入,并行输
11、入的四位移位寄存器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY shifter IS PORT (data: IN STD_LOGIC_VECTOR(3 DOWNTO 0); sl_in, sr_in, reset, clk: IN STD_LOGIC; mode: IN STD_LOGIC_VECTOR(1 DOWNTO 0); qout: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); END ENTITY shifter; ARCHITECTURE behave OF shifter IS BEGIN PRO
12、CESS(clk) BEGIN IF (clkevent AND clk=1) THEN IF (reset=1) THEN qout0); ELSE CASE mode IS WHEN 01 =qoutqoutqoutNULL; END CASE; END IF; END IF; END PROCESS;END ARCHITECTURE behave ;同步清零同步清零mode1.001 右移输入右移输入10 左移输入左移输入11 并行输出并行输出三、顺序脉冲发生器三、顺序脉冲发生器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mc IS P
13、ORT( clk: IN STD_LOGIC; r: IN STD_LOGIC;-同步复位同步复位 q0,q1,q2:OUT STD_LOGIC); END mc;(同步复位方式)三位顺序脉冲发生器(同步复位方式)三位顺序脉冲发生器ARCHITECTURE rtl OF mc IS SIGNAL y,x: STD_LOGIC_vector(2 DOWNTO 0);-y现态,现态,x次态次态 BEGIN PROCESS(clk,r) r为同步复位端,此处可去掉为同步复位端,此处可去掉 BEGIN IF(clkevent AND clk=1)THEN IF(r =1)THEN y=000; x=0
14、01; ELSE y=x; x=x(1 DOWNTO 0)&x(2); END IF; END IF; END PROCESS; q0=y(0); q1=y(1); q2=y(2);END rtl; 100010001100五、计数器和分频器五、计数器和分频器v 4位异步复位加法计数器位异步复位加法计数器u 计数器计数器rclkQ3 Q2 Q1 Q0co1X 0 0 0 000X保持保持0上升沿加100上升沿加满1 4位位异异步步复复位加位加计数计数器器VHDL设计实设计实例例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC
15、_ARITH.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY async_reset_counter4 IS PORT(r: IN STD_LOGIC; clk: IN STD_LOGIC; co: OUT STD_LOGIC; q: BUFFER STD_LOGIC_vector(2 DOWNTO 0);END async_reset_counter4; ARCHITECTURE rtl OF async_reset_counter4 ISBEGINPROCESS(r,clk) BEGIN IF(r=1) THEN q=000; ELSIF(clkeve
16、nt AND clk=1)THEN IF(q=111) THEN q=000; ELSE q=q+1; END IF; ELSE q=q; END IF;END PROCESS; co=1WHEN q=111ELSE0;END rtl; 五、计数器和分频器五、计数器和分频器v 同步可逆计数器同步可逆计数器u 计数器计数器rupdownclk1XX01上升沿00上升沿Q3 Q2 Q1 Q0 0 0 0 0计数值加1计数值减1 4位二位二进进制可逆制可逆计数计数器器VHDL设计实设计实例例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_L
17、OGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY updown_counter4 IS PORT(r: IN STD_LOGIC; clk: IN STD_LOGIC; updown: IN STD_LOGIC; q: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END updown_counter4;ARCHITECTURE rtl OF updown_counter4 ISBEGIN PROCESS(r,clk,updown) 异异步步复复位位 BEGIN IF(r=1) THEN q=0000; ELS
18、IF(clkevent AND clk=1)THEN IF(updown=1) THEN updown=1,加,加计数计数 IF(q=1111) THEN q=0000; ELSE q=q+1; END IF; ELSE IF(q=0000) THEN q=1111; ELSE q=q-1; END IF; END IF;ELSE q=q;END IF;END PROCESS;END rtl; 60进进制制计数计数器器VHDL设计实设计实例例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEE
19、E.STD_LOGIC_UNSIGNED.ALL;ENTITY counter5 IS PORT(clk:IN STD_LOGIC; co:out STD_LOGIC; q: BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END counter5;ARCHITECTURE rtl OF counter5 ISBEGIN PROCESS(clk) BEGIN IF(clkevent AND clk=1)THEN IF(q=59 )THEN q=00000000; ELSE q=q+1; END IF; END IF;END PROCESS; co=1WHEN q=59
20、ELSE0;END rtl;v异步计数器异步计数器u计数器计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY r_dff IS PORT(r: IN STD_LOGIC; clk: IN STD_LOGIC; d: IN STD_LOGIC; q: OUT STD_LOGIC; qb: OUT STD_LOGIC); END r_dff ;ARCHITECTURE rtl OF r_dff IS SIGNAL q_in: STD_LOGIC;BEGIN PROCESS(r,clk) BEGIN IF(r=0) THEN q=0; qb=1; E
21、LSIF(clkevent AND clk=1)THEN q=d; qb=NOT d; END IF; END PROCESS;END rtl; 底层模块底层模块D触发器触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY rplcont IS PORT(r: IN STD_LOGIC; clk: IN STD_LOGIC; q: OUT STD_LOGIC_vector(3 DOWNTO 0);END rplcont;ARCHITECTURE rtl OF rplcont ISCOMPONENT r_dff PORT(r,clk,d: IN S
22、TD_LOGIC; q,qb: OUT STD_LOGIC); END COMPONENT;SIGNAL q_temp:STD_LOGIC_vector(4 DOWNTO 0);BEGIN q_temp(0)q_temp(i),d=q_temp(i+1),q=q(i),qb=q_temp(i+1); END GENERATE; END rtl; 顶层文件顶层文件异步计数器异步计数器Temp(4)Temp(0)Temp(1)Temp(2)Temp(3)五、计数器和分频器五、计数器和分频器v 偶数分频器偶数分频器任意偶数任意偶数u 分频器分频器 实现分频器的实现分频器的VHDLVHDL设计,就是采
23、用标准计数器来实现。设计,就是采用标准计数器来实现。 首先设计一个标准计数器,然后通过对标准计数器的计数首先设计一个标准计数器,然后通过对标准计数器的计数控制给出分频器的输出信号。控制给出分频器的输出信号。 如实现分频器的分频系数为如实现分频器的分频系数为N=2nN=2n(n=1n=1、2 2、3 3、),),具体的设计是,首先设计一个模具体的设计是,首先设计一个模n n的标准计数器,然后设定一的标准计数器,然后设定一个中间信号,这个中间信号在计数器计满时就进行一次翻转操个中间信号,这个中间信号在计数器计满时就进行一次翻转操作,最后将这个中间信号赋值给分频器的输出即可。作,最后将这个中间信号赋
24、值给分频器的输出即可。-12分频器分频器VHDL设计实例设计实例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_12div IS PORT(clk: IN STD_LOGIC; div12: OUT STD_LOGIC);END clk_12div;ARCHITECTURE rtl OF clk_12div IS SIGNAL counter: STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL clk_temp: STD_LOGIC;BEGIN PRO
25、CESS(clk) BEGIN IF(clkevent AND clk=1)THEN IF(counter =101)THEN counter0); clk_temp=NOT clk_temp; ELSE counter=counter+1; END IF; END IF; END PROCESS; div12= clk_temp;END rtl; 五、计数器和分频器五、计数器和分频器v 偶数分频器偶数分频器2的整数次幂的整数次幂u 分频器分频器-分分频频系系数为数为2、4、8的分的分频频器器VHDL设计实设计实例例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.AL
26、L;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_8div IS PORT(clk: IN STD_LOGIC; div2: OUT STD_LOGIC; div4: OUT STD_LOGIC; div8: OUT STD_LOGIC);END clk_8div;ARCHITECTURE rtl OF clk_8div IS SIGNAL counter: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS(clk) BEGIN IF(clkevent AND
27、 clk=1)THEN IF(counter =111)THEN counter0); ELSE counter= counter+1;END IF;END IF;END PROCESS; div2= NOT counter(0); div4= NOT counter(1); div8= NOT counter(2);END rtl; 五、计数器和分频器五、计数器和分频器v 偶数分频器偶数分频器占空比不是占空比不是1:1u 分频器分频器 前面讨论的分频器的都是占空比为前面讨论的分频器的都是占空比为1 1:1 1的分频器,下面讨论的分频器,下面讨论占空比不是占空比不是1 1:1 1的分频器的的分
28、频器的VHDLVHDL设计。占空比不是设计。占空比不是1 1:1 1的分的分频器的一般设计方法:频器的一般设计方法: 首先根据待分频计数器计数;然后根据计数器的并行信号输首先根据待分频计数器计数;然后根据计数器的并行信号输出决定分频输出信号的高低电平。出决定分频输出信号的高低电平。-分分频频系系数为数为6(占空比(占空比为为1:5)的分)的分频频器器VHDL设计实设计实例例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk
29、_6div IS PORT(clk: IN STD_LOGIC; div6: OUT STD_LOGIC); END clk_6div;ARCHITECTURE rtl OF clk_6div ISSIGNAL counter: STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN PROCESS(clk) BEGIN IF(clkevent AND clk=1)THEN IF(counter =101)THEN counter0); div6=1; ELSE counter= counter+1; div6=0; END IF; END IF; END PROCESS;END
30、 rtl;五、计数器和分频器五、计数器和分频器v 奇数分频器奇数分频器占空比不是占空比不是1:1u 分频器分频器分频系数为分频系数为7(占空比为(占空比为1:6)的分频器)的分频器VHDL设计实例设计实例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY clk_7div_1 IS PORT(clk: IN STD_LOGIC; div7: OUT STD_LOGIC); END clk_7div_1;ARCHITECTURE r
31、tl OF clk_7div_1 ISSIGNAL counter: STD_LOGIC_vector(2 DOWNTO 0); BEGIN PROCESS(clk) BEGIN IF(clkevent AND clk=1)THEN IF(counter =110)THEN counter0); ELSE counter=counter+1; END IF; END IF; END PROCESS; PROCESS(clk) BEGIN IF(clkevent AND clk=1)THEN IF(counter =100 ) THEN div7=1; ELSE div7=0; END IF;
32、END IF; END PROCESS; END rtl; 五、计数器和分频器五、计数器和分频器v 奇数分频器奇数分频器占空比不是占空比不是1:1u 分频器分频器分频系数为分频系数为7(占空比为(占空比为3:4)的分频器)的分频器VHDL设计实例设计实例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY clk_7div_2 IS PORT(clk: IN STD_LOGIC; div7: OUT STD_LOGIC); END
33、clk_7div_2;ARCHITECTURE rtl OF clk_7div_2 IS SIGNAL counter: STD_LOGIC_vector(2 DOWNTO 0); BEGIN PROCESS(clk) BEGIN IF(clkevent AND clk=1)THEN IF(counter =110)THEN counter0); ELSE counter=counter+1; END IF; END IF; END PROCESS; PROCESS(clk) BEGIN IF(clkevent AND clk=1)THEN IF(counter =100 OR counter
34、=“101” OR counter=“110”) THEN div7=1; ELSE div7=0; END IF; END IF; END PROCESS; END rtl;五、计数器和分频器五、计数器和分频器v 奇数分频器奇数分频器占空比是占空比是1:1u 分频器分频器 占空比是占空比是1 1:1 1的奇数分频器的设计较为复杂,因为它需要同时的奇数分频器的设计较为复杂,因为它需要同时利用输入时钟信号的上升沿和下降沿进行触发。这种分频器的一利用输入时钟信号的上升沿和下降沿进行触发。这种分频器的一般设计方法:如果分频系数为般设计方法:如果分频系数为N=2n+1N=2n+1(n=1n=1、2 2
35、、3 3、),首先),首先设计两个占空比为设计两个占空比为n n:(:(n+1n+1)的的N N分频器,一个分频器采用输入分频器,一个分频器采用输入时钟信号的时钟信号的上升沿上升沿来触发,另外一个分频器则采用输入时钟信号来触发,另外一个分频器则采用输入时钟信号的的下降沿下降沿来触发;之后对产生的两个分频信号进行相应的或运算来触发;之后对产生的两个分频信号进行相应的或运算,从而实现分频器的设计。,从而实现分频器的设计。 分分频频系系数为数为7(占空比(占空比为为1:1)的分)的分频频器器VHDL设计实设计实例例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY clk_7div_3 IS PORT(clk: IN STD_LOGIC; div7: OUT STD_LOGIC); END clk_7div_3;ARCHITECTURE rt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年幼儿园食品安全管理协议书
- 合作投资合同书示例
- 广州市劳动合同范本参考
- 2024灯饰采购合同范文
- 安徽省淮南市七年级上学期语文期中试题3套【附答案】
- 提升机租赁合同样式
- 2024抵押贷款合同协议书样式
- 6.2 共筑生命家园(导学案) 2024-2025学年统编版道德与法治九年级上册
- 购房合同协议书范本
- 仓库租赁合同样本
- 有色金属熔炼与铸锭课件
- 阻生牙拔除的护理
- 安徽省芜湖市七年级上学期语文期中试卷(含答案)
- 两癌知识科普课件
- 食用菌现代高效农业示范园区建设项目建议书
- 东营港加油、LNG加气站工程环评报告表
- 2024年日历(打印版每月一张)
- 车用动力电池回收利用 管理规范 第2部分:回收服务网点征求意见稿编制说明
- 新剑桥少儿英语第六册全册配套文本
- 科学预测方案
- 职业生涯规划网络与新媒体专业
评论
0/150
提交评论