数电研讨:医用生产线控制电路_第1页
数电研讨:医用生产线控制电路_第2页
数电研讨:医用生产线控制电路_第3页
数电研讨:医用生产线控制电路_第4页
数电研讨:医用生产线控制电路_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字电子技术研讨报告医用生产线控制电路梁桥 10212010 张梦皓 10212027通信1009【研讨要求】设计一个医用生产线控制电路1. 能够设定每瓶药片数目;如每瓶50片;2. 每24瓶为一箱,计数到18箱停止。3. 要求用软件设计,并仿真;4. 23人一组,明确工作分工;5. 写出项目研究报告一项目方案,设计过程,仿真结果,要求每 个人就自己负责的部分写出分报告,同吋,要完成group的总报告。【目录】1、项口方案2、设计过程(分报告)3、仿真结果4、心得体会【项目方案】首先我们根据老师所给要求以及提示将电路大致分为两部分:输 入部分和计数部分。本来想以此分工,但是不久便发现输入部分的

2、功 能较多,而计数部分功能较为单一,设计的工作量分配不均匀。我们 一起将电路再细分为了一个个模块。以模块为单位的设计流程图如下:计数器l(n)寄彳11按键输入7447计数脉冲计数器2(24)bcd二进制转换器【低位】bcd-二进制 转换器【高位】加法器计数器3(18)7447总计数器1 7447744447 447 f 7447 输入部分的主要功能是由一个键盘输入一个设定值,用于给计数部分设定初值,即每瓶所装药片的个数,经由寄存器选择十位和个位 分别有两个数码管显示出來,在经由加法器相加得到二进制计数值。输入部分主要由一个输入按键、一个寄存器(选择输入十位或各 位数据)2个7段数码管和一个加法

3、器组成。计数部分是这个医用生产线电路的主要功能性部分。计数部分的 作用是完成生产线的自动计数功能,即根据输入的片数进行分瓶,而 后每24瓶自动计为一箱,计到18箱停止。计数部分主要市一个n模计数器、一个模24计数器、一个模18 计数器构成装配计数器,由五个模十计数器构成总计数器,再输出到 数码管。这些器件都是由vdhl语言实现的,这个语言只需要设定输入输 出端口,并赋了相应功能即可,不注重内部结构只关心输入输出功能, 工程性很强。在数字电路设计仿真上十分常用。结合quartos ii软 件可以根据情况产生一个元件,并且画出波形图,只需要把相应的管 脚加入列表即可,节省了很多的时间。quartu

4、s ii这一软件还有许 多很强大的功能,也可以用固定的元件搭造组合器件。这个软件让我 们在仿真时感觉十分简洁方便。在具体设计时,我们以模块为单位进行了分工,其中键盘、寄存 器和bcd-二进制转换器主要由张梦皓设计,加法器、分计数器和总 计数器主要由梁桥设计。【设计过程】张梦皓:键盘、寄存器和bcd-二进制转换器梁桥:加法器、三个分计数器和总计数器首先是输入键盘元件,我们采用的是4*4的一个键盘如下图所示,(3 2 3)0国回回叵) 3回回回根据案件的行数和列数确定输入,再输出想对应数字。比如我按下第一行第一列的数字,则输出为1,而 第一行第二列就输岀2。我还设定a代表着十位,b代 表着个位,输

5、入吋应先按下a再输入十位,然后按下b再输入个位。同时我还规定d为清零键。程序如下:library ieee;use ieee.std logic 1164.all;entity keyboard isport(定义管脚clk: in std_logic;row: in std_logic_vector(3 downto 0); 行向量 col: in std_logic_vector(3 downto 0); 列向量 data: out std_logic_vector(3 downto 0);f :out std.logic; 给寄存器判断是否有输入en1:outstd_logic;en2:

6、 out std_logic;en3:outstd_logic);end entity keyboard;architecture rtl of keyboard issignal mid: std_logic_vector(7 downto 0);signal num: std_logic_vector(3 downto 0);beginprocess(clk,row,col)beginmid<=(row&col);if (clk'event and clk='l') thencase mid is/when "00010001"=&

7、gt; num<="0001h;第一行第一列为 1when "oooiooio" num<="0010"第一行第二列为 2when "00010100m=> num<=h0011"when "ooiooooi" num<="0100"when "00100010n=> num<=h0101"when "00100100"=> num<=n0110"when "0100000

8、1,=> num<=,0111"when "01000010m=> num<=h1000"when "01000100n=> num<=h1001"when "10000010n=> num<=n0000"when"10001000"=>num<="1010,;enl<=,0'en2<=,0'en3<=,0,;/ 清零when/00011000,=>num<=/llir;enl<=/r

9、;en2<=/0,;en3<=/0/;/ 高位计数器计数值when/00101000/,=>num<=/llll,;enl<=/0,;en2<=/r;en3<=/0,;/ 低位计数器计数值when"o1oo1ooo,=>num<=,1111"en1<=,o'en2<=,o,;en3<=,1,;/when others=> num<=,1111,;/1111 的时候表示数据无效end case;end if;data<=num;f<=(num(o) and num(l) a

10、nd num(2) and num(3); end process;end rtl;模块如下:keyboardclkdata3.or0w3.ofcol3.0en1en2en3:inst2、寄存器寄存器部分的作用是可以将输入的十位数字和各位数字分别送 给七段管显示出来。这里定义了寄存器有五个输入端,八个输出端,输入端的四位是 数据输入,而还有一位是进位输入,当为1的时候就是十位数据, 为o的吋候就是各位数据输入。程序如下:library ieee;use ieee.std_logic_1164.all;entity register_diy isp0rt(f: in std_l0gic;clk:

11、 in std_l0gic;carry : in std_l0gic;rin: in std_l0gic_vect0r(3 downto 0);out_low: out std_l0gic_vect0r(3 downto 0);out_high:out std_l0gic_vect0r(3 downto 0);end register_diy;architecture rtl of register_diy issignal f_in: std_logic_vector(1 downto 0);beginprocess(clk,f,carry)beginfnv=(f&carry);if

12、 (r_in=m1010w) then out_low=,oooow;out_high=w0000w;elsif (clk'event and clk二t) thencase f_in iswhen "00"=> out_low<=rin;when n01n=> out_high<=rin;when others=> null;end case;end if;end process;end rtl;模块如下:register 1:! fout_low3.0t:clkout_high3.,0t111 rin3.o: :instcd码到二进

13、制的转换器转换器的作用是将bcd转为二进制码,在开始的时候输入的是2 个十进制数,分别用bcd码表示的,但是我们知道计数器只能是计 数二进制数,所以就必须应用到bcd码一一二进制转换器,而且要 分区分高位和低位的不同。首先说低位,地位相对简单,只是在bcd码前面加上4个0即 可,因为事实上当小于9时bcd码和二进制码是一样的。程序(低位)如下:library ieee;use ieee.std_logic_1164.all;entitybcd_binaryjow isport ( bcdjow: in bit_vector(3 downto 0);binaryjow:outbit_vector

14、(7 downto 0);endbcd_binaryjow;architecture rtl of bcd_binaryjow is begin process(bcdjow)begincasebcdjow iswhen ”0000” =>binary_low<=,00000000"when ”0001“ =>binaryjow<=,00000001"when ”0010“ =>binaryjow<=,00000010u;when ,0011u =>binary_low<=,00000011,1;when ”0100” =&g

15、t;binaryjow<=h00000100h; when "olol"刃binaryowv=“000001(h“;when "oho" =>binaryjow<=,00000110n;when=>binaryjow<=,00000111"when ”1000” =>binary_low<=,'00001000,'when ”1001” =>binaryjow<=,00001001,'when others =>binary_low<=,01000000&

16、quot; end case;end process;end rtl;模块如下:弓遞“ ©参揶汐临0 色醪心bcd_bi nary_low1 bcdo w3.obinary_low7.0=inst4程序(咼位)如下:library ieee;use leee.stdogic_1164.all; entitybcd_binary_high is port ( clk: in std_logic;bcd_high: in bit_vector(3 downto 0); binary_high:outbit_vector(7 downto 0); endbcd_binary_high;ar

17、chitecture rtl of bcd_binary_high is beginprocess(bcd_high,clk)beginif clk'event and clk=t then casebcd_high is when ”0000” =>binary_high<="00000000" when h0001" =>binary_high<=,00001010h;when "0010" =>binary_high<=,00010100"when "ooll" =

18、>binary_highvi'00011110”;when ”0100“ =>binary_high<="00101000,'when "olol" =>binary_high<=h00110010"when "ollo" =>binary_high<=,'00111100h;when "0111" =>binary_high<=,01000110"when "looo" =>binary_high&l

19、t;=,01010000h;when h1001" =>binary_high<="01011010h;when others =>binary_high<="00000001" end case;end if;end process;end rtl;模块如下:耳眾h®呃 o 令裁ti bf bcd_binary_high1 uei0iiclk1 bcd_high3. 0binary_high7 0 instrnr4.加法器如何最终把一个两位十进制数转化成一个八位二进制数,作为下 一级计数器的模值?需要用到一个加法器。加

20、法器的作用比较单一,即把十位和个位的数字相加,变为二进 制表示的数字,完成对键盘输入数字的生成,用作计数部分设定计数 初值使用程序如下:library ieee;use ieee.std_logic_1164.all; useleee.stdo gic_unsigned.all; entityunsigned_adder isport ( ab: in stdogic_vector(7 downto 0); s: out stdogic_vector (7 downto 0); endunsigned_adder;architecture rtl of unsigned_adder is be

21、gins<=a + b;end rtl;模块如下:二| 烫 0 ©唸© i 眇心 i5、分计数器如何实现每瓶中装入n片药片,每24瓶为一箱,并计数到18 箱停止?这里我们将监测药片的红外脉冲作为第一个计数器的时钟信号, 以前一个加法器输出的八位二进制数为它的计数初值,将这个模n计 数器的进位信号给下一级作为时钟信号,再将下一级的模24计数器 的进位信号给模18计数器作为始终,而模18计数器的进位信号作为 停止信号反馈给计数使能端。程序如下:libraryieee;use ieee.std_logic_1164.all;useieee.std_logic_ unsign

22、 ed.all;entity bc3 isport(clk:instd_logic;d:instd_logic_vector(7 downto 0);q,r:bufferstd_logic_vector(7 downto 0);cd:outstd jo gic;en:instdogic);end;architecture one of bc3 is beginprocess(clk)beginifclk'event and clk='l'and en='l'thenr<=d;end if;ifclk'event and clk='l

23、'and en='0*thenif q<r-1 thenq<=q+1;else q<="00000000"end if;end if;end process;process(q)begin讦 q=r-1 thencd<=,l,; else cd<='0' end if; end process; end;模块如下:jclkq7.ol1 d7.ocd9en夕;be 3i instnr6、总计数器如何显示总共已经装配了多少药片呢?根据计算总药片数量最大为42768,所以我们采用5个模十计数 器分别给每位计数,第一级的

24、时钟信号依然为监测药片的红外脉,之 后每一级的进位信号为下一级的时钟。每一个计数器分别连接连接一 个数码管,从而达到显示总药片数目的目的。程序如下:libraryieee;use ieee.std_logic_1164.all; useieee.std_logic_ unsign ed.all;entity counter isport(clko: in stdjogic;rst: in std_logic;bcd: out std_logic_vector(3 downto 0);rco: out std_logic);end counter;architecture behave of c

25、ounter is beginprocess(clko,rst)variable n: std_logic_vector(3 downto 0); begin讦 rst='o' then n:=(others=>'0');els讦 clko'event and clko='l' thenif n<9 thenn+l;rco<=,0,;else n:="0000"rco<=,l,;end if;end if;bcd<=n;end process;end behave;模块如下:【仿真结果】1

26、、键盘15 6!o12jgs6t891oh12订 m1516171819cua3 cola(i.3al.2】al.11al0)als wva(i.3al2】al-.11al0alq dataa(.3al2aual0aihlaleealex3al每个数字的对应按键都与该数字准确对应,按下a后使能输岀为高电平,按下b后输入使能输出为低电平。功能得到实现value 土17. k10.0 ns20. 9 ns17 65 ns30 0 ns50 0 as60 0 nsto 0 ns80 f ns»901234567892111213141516mp抄j"1 riiiiiiiii1i1

27、:to)jc"t8-15rrrr: 【0】x8熬tis一款t8-厂 r1"lr"lha-d i i i “ 0 ii a a a a a a aka2、寄存器使能电平为高吋,输入高位;使能电平为低吋,输入低位。功能得到实现。3、bcd 二进制转换器咼位:低位:siaulatlon aode: tilling4 mester time bor13 35 n$ 卜 pointer73 31 n$ interval59 96 ns startendanaaed ps20.0 nsgyns60.0 ns80.0 ns100.0 ns120.0 ns140.0 ns 160

28、.0 nst13.35 ns.»00 bcd.lovl01x 21 )31 :4j x l5j x l6j x l71 x l8j x l91 x 101 x llll x l12 x l131 xlijj-bcd-lo利 -bcd_low( -bcd-lo.l -bcd.lo>n: binary lov01xl1j加x生x浪x 7棒x舜ry.lt ry丄 ry.k ry丄 ryv ryv ry.k ry lcjir1>9o1. o 1.o1. 0 1lj"1"i r"ur1输入与输出和等,得到对应二进制数。功能得到实现。4、加法器k mas

29、ter time bars a a b 日s13 35 ns16946 ns15611nsend:40.0 ns80.0 ns120.0 nsps2卿皿1135 ns阿“mm侗山“山国山机砚侗湎比“比就侗山“比円山鬥比“山国山勰丽 ©加从0比(|山御摘版必酿皿価曲帰沁屈同 ©湖山从已畑摘畑1j 1j 1j 1j 1j 1j 1j 1j 76543210 rl rl rl rl rl rl rl ssssssss完成加法运算,有微小延迟。功能得到实现。5、 分计数器simulation waveforms14 075 m | | pointer |1 24n$ interva

30、l |-12 84n$ st«tend iname«>0cd 1clk母2 i3-d74d61*5-d5"6-d"7-d(3)8-叽2gdl10ldo11i:n参12el gc> 13q7a 14q6a 15q5u 16q4a 17-q3<> 18-qc2a 19-qc1c>20lqo<>21r(0«>22rl«>23r2«>24r狙master time barpps40, g n80 9 n120 0 ns160 0 ns200 0 ns240 0 ns14 075 nsjg10xt8-rurlrlrlrlrlrlrlrlrlrlrltlrlrlrlrlrlrlrlrlrlnrlrlr<01l111111jl1rl1j-l1jll1_1_j-t_1_厂1_j1_t_r1_lrl_厂j1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论