EDA设计大作业
- 格式:doc
- 大小:596.00 KB
- 文档页数:17
电子设计自动化大作业题目彩灯控制器的设计学院**学院班级电气**学号**********姓名********二O一二年十月三十一日彩灯控制器的设计一、彩灯控制器的设计要求设计能让一排彩灯(8只)自动改变显示花样的控制系统,发光二极管可作为彩灯用。
控制器应有两种控制方式:(1)规则变化。
变化节拍有0.5秒和0.x秒两种,交替出现,每种节拍可有4种花样,各执行一或二个周期后轮换。
(2)随机变化。
无规律任意变化。
二、彩灯控制器的设计原理本次彩灯控制器的设计包含几个主要模块,一是彩灯显示和扬声器的时序控制部分,二是发光二极管的动态显示和数码管的动态显示,本次设计中,二者的显示同步变化;三是扬声器的控制部分。
流程图如下所示:图 1 彩灯控制器的设计流程图彩灯控制器的设计核心主要是分频器的使用,显示部分的设计较简易。
分频的方法有很多种,本次设计之采用了其中较简易的一种,通过计数器的分频,将控制器外接的频率分为几个我们预先设定的值。
当计数器达到预先设定的值,即产生一个上升沿,从而实现分频。
扬声器通过不同的频率控制发出不同的声音。
同样发光二极管和数码管的显示速度也由其中分出来的一种频率控制(控制显示频率在1~4 之间为宜)。
通过使能端的控制可以控制不同的数码管显示预先设定的图案,数码管依次显示的图案为 AA、BB、CC,并随着发光二极管同步动态显示。
AA 为自左向右显示,BB 为自右向左显示,CC 从二边向中间再由中间向二边发散显示。
与此同时,显示不同的花型时扬声器发出不同的声音,代表不同的花型。
本次设计还带有复位功能,通过复位可以使彩灯控制器恢复到最初的状态。
三、程序设计和分析library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;建立设计库和标准程序包实体部分: entity pan isport(clk:in std_logic;clr:in std_logic;speak:out std_logic;led7s1:out std_logic_vector(6 downto 0);led7s2:out std_logic_vector(7 downto 0);led_selout:out std_logic_vector(7 downto 0);end entity;实体名为 pan,定义端口,输入端口为 clk 和 clr ,其中 clk 接脉冲信号,clr 接复位端;输出端口 speak 接扬声器,led7s1 接数码管的七段显示部分,led7s 接八个发光二极管,led_selout 接八个数码管的使能端,控制数码管的循环显示。
交通灯控制器设计一.系统功能设计要求设计制作一个用于十字路口的交通灯控制器,要求如下:(1)南北和东西方向各有一组红、绿、黄灯来指挥交通,持续时间分别为25S,20S,和5S。
(2)当有特殊情况(如消防车、救护车等)时,两个方向均为红灯亮,计时停止。
(3)当特殊情况结束后,控制器恢复原来状态,继续正常运行。
(4)用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的时间。
二.设计原理1.交通灯控制器的状态转换根据题目要求将将红绿灯的状态转换列成如下表:2.设计方案1)由于交通灯需要使用2位7段LED数码管指示通行剩余时间,故采用LED动态扫描方式显示当前时间。
频率设定CLK1k对应的频率为50MHZ。
2)控制模块是交通灯的核心,主要控制交通灯按工作顺序自动变换,同时控制倒计时模块工作,每当倒计时回零时,控制模块接收到一个计时信号,从而控制交通灯进入下一个工作状态。
3)每个方向有一组2位倒计时器模块,用以显示该方向交通灯剩余的点亮时间。
4)显示模块由两部分组成,一是由七段数码管组成的倒计时显示器,每个方向两个七段数码管;二是由发光二极管代替的交通灯,每个方向3个发光二极管。
三.变量符号说明其中,CLK1K为系统时钟信号输入端,SN为禁止通行信号输入通行信号输入端,light0为东西红灯信号输出端,light1为东西黄灯信号输出端,light2为东西绿灯信号输出端,light3为南北红灯信号输出端,light4为南北黄灯信号输出端,light5为南北绿灯信号输出端,led1、led2、led3、led4为数码管地址选择信号输出端。
四.代码说明library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Hongld ISport (clk1k,SN:in std_logic; --SN紧急情况led1, led2, led3, led4 :out std_logic_vector (6 downto 0);--显示管显示时间用light:out std_logic_vector (5 downto 0)); --红绿黄灯end Hongld;architecture traffic1 of Hongld ISsignal S:std_logic_vector (1 downto 0); --状态signal DXT:std_logic_vector(7 downto 0):=X"01"; --东西方向时间signal NBX:std_logic_vector(7 downto 0):=X"01"; --南北方向时间signal ART,AGT,AYT,BRT,BGT,BYT: std_logic_vector(7 downto 0); --红绿黄灯信号signal temp: integer range 0 to 49999999; --产生1s计数器时计数signal clk: std_logic;beginART<="00100101";AGT<="00100000";AYT<="00000100";BRT<="00100101";BGT<="00100000";BYT<="00000100";process(clk1k) -- 选频率为50MHZ beginif (clk1k'event and clk1k='1') thenif temp=49999999 thentemp<=0;clk<='1';elsetemp<=temp+1;clk<='0';end if;end if;end process;process(clk,DXT,NBX) --状态转换进程beginif clk'event and clk ='1' thenif(DXT ="00000001")OR (NBX = "00000001") then S<=S+1;else S<=S;end if; --状态转换结束end if;end process;process (clk,SN,S) --倒计时模块beginif SN = '1' then DXT<=DXT; NBX<=NBX;elseif clk'event and clk='1' thenif (DXT="0000000") OR (NBX="00000000") thencase S ISwhen "00"=>DXT<=ART; NBX<=BGT; --南北红灯、东西绿灯when "01"=>NBX<=BYT; --南北红灯、东西黄灯when "10"=>DXT<=AGT; NBX<=BRT; --南北绿灯、东西红灯when "11"=>DXT<=AYT; --南北黄灯、东西红灯when others=>NULL;end case;end if;if DXT/="00000000" thenif DXT(3 downto 0)= "0000" thenDXT(3 downto 0)<="1001";DXT(7 downto 4)<=DXT(7 downto 4)-1;else DXT(3 downto 0)<=DXT(3 downto 0)-1;DXT(7 downto 4)<=DXT(7 downto 4);end if;end if;if NBX/="00000000" thenif NBX(3 downto 0)="0000" thenNBX(3 downto 0)<="1001";NBX(7 downto 4)<=NBX(7 downto 4)-1;else NBX(3 downto 0)<=NBX(3 downto 0)-1;NBX(7 downto 4)<=NBX(7 downto 4);end if;end if;end if;end if;end process; --倒计时模块结束process(DXT,NBX,S,SN) --显示模块begincase NBX(3 downto 0) iswhen "0000"=>led1<="1000000";when "0010"=>led1<="0100100"; when "0011"=>led1<="0110000"; when "0100"=>led1<="0011001"; when "0101"=>led1<="0010010"; when "0110"=>led1<="0000010"; when "0111"=>led1<="1111000"; when "1000"=>led1<="0000000"; when "1001"=>led1<="0010000"; when others=>led1<="1111111"; end case;case NBX(7 downto 4) iswhen "0000"=>led2<="1000000"; when "0001"=>led2<="1111001"; when "0010"=>led2<="0100100"; when "0011"=>led2<="0110000"; when "0100"=>led2<="0011001"; when "0101"=>led2<="0010010"; when "0110"=>led2<="0000010"; when "0111"=>led2<="1111000"; when "1000"=>led2<="0000000"; when "1001"=>led2<="0010000"; when others=>led2<="1111111"; end case;case DXT(3 downto 0) iswhen "0000"=>led3<="1000000"; when "0001"=>led3<="1111001"; when "0010"=>led3<="0100100"; when "0011"=>led3<="0110000"; when "0100"=>led3<="0011001"; when "0101"=>led3<="0010010"; when "0110"=>led3<="0000010"; when "0111"=>led3<="1111000"; when "1000"=>led3<="0000000"; when "1001"=>led3<="0010000"; when others=>led3<="1111111"; end case;case DXT(7 downto 4) iswhen "0000"=>led4<="1000000"; when "0001"=>led4<="1111001"; when "0010"=>led4<="0100100";when "0100"=>led4<="0011001";when "0101"=>led4<="0010010";when "0110"=>led4<="0000010";when "0111"=>led4<="1111000";when "1000"=>led4<="0000000";when "1001"=>led4<="0010000";when others=>led4<="1111111";end case;if SN ='1' then light<="001001";elsecase S ISwhen "00"=>light<="010001";when "01"=> light <="100001";when "10"=> light <="001010";when "11"=> light <="001100";when others=>NULL;end case;end if;end process;end traffic1;五.仿真波形图仿真时序波形图。
1.简单PLD器件包括哪几种类型的器件?他们之间有什么相同点和不同点?答:PLD器件一般可分为4种:PROM、PLA、PAL、GAL器件相同点:简单PLD的典型结构是由与非门阵列、或门阵列组成,能够以“积之和”的形式实现布尔逻辑函数,因为其任意一个组合逻辑都可以用“与或”表达式来描述,所以能够完成大量的组合逻辑功能,并且具有较高的速度和较好的性能。
不同点:PROM:(1)与阵列固定,或阵列可编程(2)当输入的数目太大时,器件功耗增加,巨大阵列开关时间也会导致其速度缓慢,但其价格低,易于编程,没有布局、布线问题,性能完全可以预测。
PLA:(1)与阵列和或阵列都可编程(2)由于与阵列可编程,使得PROM中由于输入增加而导致规模增加的问题不复存在,从而有效地提高芯片的利用率,其用于含有复杂的随机逻辑值换的场合是较为理想,但其慢速特性和相对高的价格妨碍了它被广泛使用。
PAL:(1)或阵列固定,与阵列可编程(2)与阵列可编程特性使输入项可以增多,而固定的或阵列又使器件得以简化。
在这种结构中,每个输出是若干乘积项之和,乘积项数目有时固定的。
其结构对于大多数逻辑函数是有效的,同时此结构也提供了较高的性能和速度,一度成为PLD发展史的主流。
GAL:其吸收先进的浮栅技术,并与CMOS的静态RAM结合,成了E2PROM 技术,从而使GAL具有了可电擦写、可重复编程、可设置加密功能。
GAL的输出可由用户来定义,他的每个输出端都集成着一个可编程的输出逻辑宏单元。
2.Altera公司MAX7000系列CPLD有什么特点?MAX7000系列是高密度、高性能的CMOS CPLD,采用先进的0.8umCMOS EEPROM技术制造,它提供600~5000可用门,引线端子到引线端子的延时为6ns,计数器频率可达151.5MHz,它主要有逻辑阵列块、宏单元、扩展乘积项、可编程连线阵列和I/O控制模块组成。
在掌握常用数字电路功能和原理的基础上,根据EDA技术课程所学知识,利用硬件描述语言Verilog HDL、EDA软件Quartus II和硬件平台Cyclone/Cyclone II FPGA进行电路系统的设计。
本次实验我完成的内容是简单计算器的设计,下面我简单的进行一下原理的阐述。
设计一个简单计算器,输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、 *、/ 四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示。
为了完成要求的效果显示,我先设计了一个简单的四则运算器,为了使其结果能清楚的看到,所以计算器模块和一个7段数码管模块连接。
实验要求,输入分别用两位数码管显示,输出用四位数码管显示,所以用一个3—8译码器和数码管连接,通过开关控制,形成动态显示。
从左向右,依次是第一位数码管显示a的高四位,第二位数码管显示a的低四位;第三位数码管显示b的高四位,第四位数码管显示b的低四位;第五位数码管到第八位数码管显示输出的结果。
通过改变时钟,使其看起来像同时显示在数码管上。
设计流程如下图,分别用两个数码管表示八位二进制数,用一个case 语句表示输入数值采用哪种运算方式,分别用00,01,10,11表示加,减,乘,除。
用3—8译码器选择从哪个数码管输出。
硬件流程图输出结果 A. B 的显示软件流程图LED 灯接线部分显示:中心控制 复位编码 数码管输出输入A 输入B 运算选择C 输出out L E D 8 L E D 7 L E D 6 L E D 5 L E D 4 L E D 3 L E D 2 L E D 1第三章程序简单计算器的程序如下:module jsq9(a,b,c,Dout,count,clk,rst);input[7:0]a,b;input clk,rst;input[1:0]c;output[6:0]Dout;output [2:0]count;reg[6:0]Dout;reg[2:0]count;reg[15:0]out;reg[6:0] LED7S1,LED7S2,LED7S3,LED7S4, LED7S5,LED7S6,LED7S7,LED7S8; DECL7S u1(.A(a[7:4]) , .LED7S(LED7S1));DECL7S u2(.A(a[3:0]) , .LED7S(LED7S2));DECL7S u3(.A(b[7:4]) , .LED7S(LED7S3));DECL7S u4(.A(b[3:0]) , .LED7S(LED7S4));DECL7S u5(.A(out[15:12]) , .LED7S(LED7S5));DECL7S u6(.A(out[11:8]) , .LED7S(LED7S6));DECL7S u7(.A(out[7:4]) , .LED7S(LED7S7));DECL7S u8(.A(out[3:0]) , .LED7S(LED7S8));reg[7:0]out1,out2;always@(a,b,c,Dout,count,clk,rst)case(c)2'b00:out=a+b;2'b01:out=a-b;2'b10:out=a*b;2'b11:beginout1=a/b;out2=a%b;out={out1,out2};enddefault:;endcasealways@(posedge clk or negedge rst)beginif(!rst)count<=3'b000;else if(count==3'b111)count<=3'b000;elsecount<=count+3'b001;endalways@(posedge clk)begincase(count)3'b000: Dout<=LED7S1;3'b001:Dout<=LED7S2;3'b010:Dout<=LED7S3;3'b011:Dout<=LED7S4;3'b100: Dout<=LED7S5;3'b101:Dout<=LED7S6;3'b110:Dout<=LED7S7;3'b111:Dout<=LED7S8;endcaseendendmodulemodule DECL7S (A, LED7S);input [3:0] A;output [6:0] LED7S;reg [6:0] LED7S;always @(A)begincase(A)4'b0000 : LED7S<=7'b0111111; 4'b0001: LED7S <= 7'b0000110 ; 4'b0010: LED7S <= 7'b1011011; 4'b0011: LED7S <= 7'b1001111; 4'b0100: LED7S <= 7'b1100110 ; 4'b0101: LED7S <= 7'b1101101; 4'b0110: LED7S <= 7'b1111101 ; 4'b0111: LED7S <= 7'b0000111 ; 4'b1000: LED7S <= 7'b1111111 ; 4'b1001: LED7S <= 7'b1101111 ; 4'b1010: LED7S <= 7'b1110111 ; 4'b1011: LED7S <= 7'b1111100 ; 4'b1100: LED7S <= 7'b0111001 ;4'b1101: LED7S <= 7'b1011110 ; 4'b1110: LED7S <= 7'b1111001 ; 4'b1111: LED7S <= 7'b1110001 ; endcaseendendmodule第四章模块连接在本程序中,共由三个模块组成,第一个模块是一个四选一多路器其仿真图为:第二个模块是7段数码管显示程序如下module DECL7S (A, LED7S);input [3:0] A;output [6:0] LED7S;reg [6:0] LED7S;always @(A)begincase(A)4'b0000 : LED7S<=7'b0111111;4'b0001: LED7S <= 7'b0000110 ;4'b0010: LED7S <= 7'b1011011;4'b0011: LED7S <= 7'b1001111;4'b0100: LED7S <= 7'b1100110 ;4'b0101: LED7S <= 7'b1101101;4'b0110: LED7S <= 7'b1111101 ;4'b0111: LED7S <= 7'b0000111 ;4'b1000: LED7S <= 7'b1111111 ;4'b1001: LED7S <= 7'b1101111 ;4'b1010: LED7S <= 7'b1110111 ;4'b1011: LED7S <= 7'b1111100 ;4'b1100: LED7S <= 7'b0111001 ;4'b1101: LED7S <= 7'b1011110 ;4'b1110: LED7S <= 7'b1111001 ;4'b1111: LED7S <= 7'b1110001 ;endcaseendendmodule仿真图如下:把这个两个模块用一个3—8译码器进行连接,使其达到实验的要求。
1。
所选题目:出租车计费器2.设计要求:设计一个出租车计费器,能按路程计费,具体要求如下:(1)实现计费功能,计费标准为:按行驶里程计费,起步价为6。
00元,并在汽车行驶2km后按1.2元/km计费,当里程数达到15km后,没千米加收50%的空驶费,车辆停止和暂停时不计费。
(2)现场模拟汽车的启动、停止、暂停和换挡等状态。
(3)设计数码管显示电路,将车费和路程显示出来,各有1位小数。
3。
设计原理:设计该出租车有启动键、停止键、暂停键和档位键。
启动键为脉冲触发信号,当其为一个脉冲时,表示汽车已启动,并根据车速的选择和基本车速发出相应频率的脉冲(计费脉冲)以此来实现车费和路程的计数,同时车费显示起步价;当停止键为高电平时,表示汽车熄火,同时停止发出脉冲,此时车费和路程计数清零;当暂停键为高电平时,表示汽车暂停并停止发出脉冲,此时车费和路程计数暂停;档位键用于改变车速,不同的档位对应着不同的车速,同时路程计数的速度也不同。
4.模块设计:出租车计费器可分为两大模块,即控制模块和译码显示模块.系统框图如下:5。
电路符号:出租车计费器的输入信号有:计费时钟脉冲clk;汽车启动键start;汽车停止键stop;档位speedup.输出信号:7段显示控制信号seg7;小数点dp。
6.具体设计流程:(1)根据出租车计费原理,将出租车计费部分由5个计数器来完成分别为counterA,counterB,counterC,counterD,counterE。
①计数器A完成车费百位。
②计数器B完成车费十位和个位.③计数器C完成车费角和分(显示时只显示角)。
④计数器D完成计数到20(完成车费的起步价)。
⑤计数器E完成模拟实现车行驶100 m的功能。
(2)当超出起步价时就自动在起步价的基础上每增加一个100m脉冲就增加相应的费用,而当总里程达到或超过一定的数值时,能按新的收费标准进行收费。
(3)译码/动态扫描电路模块将路程与费用的数值译码后用动态扫描的方式驱动6只数码管,即所连接的数码管共用一个数据端,由片选信号依次选择输出,轮流显示.(4)数码管显示将千米数和计费金额均用3位LED数码管显示(2位整数,1位小数)。
微波EDA作业电磁场4班 B09020416 吴迪1.用Matlab编写微带线分析和综合程序并计算(1)基片厚度0.254mm,相对介电常数2.2的50Ohm微带线的宽度。
解:(1)程序流程图:清除原始数据W的取值范围令t=W/h分别计算a、b计算有效介电常数计算均匀媒质微带阻抗计算当特性阻抗逼近50时W的取值程序代码及注释:clearw=0.7859:0.00001:0.786 %W的值的取值范围t=w/0.254a=1+1/49*log((t.^4+(1/52*t).^2)/(t.^2+0.432))+1/18.7*log(1+(1/18.1*t).^3)b=0.564*((2.2-0.9)/(2.2+3))^0.053n=(2.2+1)/2+((2.2-1)/2)*(1+10*(1./t)).^(-a*b) %有效介电常数f=6+(2*pi-6)*exp(-(30.666./t).^0.7528)m=(376.73/(2*pi))*log(f./t+sqrt(1+(2./t).^2)) %均匀媒质微带线阻抗y=50-m./sqrt(n) %使y逼近0时W的取值运行结果:w =0.7859 0.7859 0.7859 0.7859 0.7859 0.7860 0.7860 0.7860 0.7860 0.7860 0.7860t =3.0941 3.0941 3.0942 3.0942 3.0943 3.0943 3.0943 3.09443.0944 3.0944 3.0945a =1.0455 1.0455 1.0455 1.0455 1.0455 1.0455 1.0455 1.04551.0455 1.0455 1.0455b =0.5240n =1.8722 1.8722 1.8722 1.8722 1.8722 1.8722 1.8722 1.87221.8722 1.8722 1.8722f =6.0010 6.0010 6.0010 6.0010 6.0010 6.0010 6.0010 6.0010 6.0010 6.0010 6.0010m =68.4190 68.4185 68.4179 68.4174 68.4168 68.4162 68.4157 68.4151 68.4146 68.4140 68.4134y =-0.0036 -0.0031 -0.0027 -0.0023 -0.0019 -0.0014 -0.0010 -0.0006 -0.0002 0.0003 0.0007由运行结果可以得宽度为:0.7860mm另外编程可以画出横坐标为w,纵坐标为Z0的图像:(2)基片相对介电常数6.4的微带线,W/h在0.5-10.0之间变化时,特性阻抗Z0的曲线。
EDA大作业2 设计一个循环显示电路
一、目的
学习运用硬件描述语言设计数字电路。
二、任务
设计一个循环显示电路。
要求在数码管上循环显示四个数字,按下复位键清零,按下暂停键循环停止,按控制键可实现四个数字的左移或右移。
使用实验箱上50MHz晶振作为系统时钟输入。
三、内容及步骤
1. 设计分频电路,建议将50MHz分到5Hz。
2. 运用状态机设计循环显示电路,在一个数码管上分别显示1,9,3,5,1,9,3,5……
3. 设计控制电路,使四个数字可以在四个数码管上分别实现左移或右移。
4. 下载到实验箱上验证功能。
注:可以使用State Machine Viewer功能观看状态转换图,检查编写的状态机是否正确。
四、验收步骤
整个project下载实现全部功能后,才能开始验收。
请同学们首先按以下步骤自查,做的过程中可以答疑,但每人只有一次验收机会。
1. 电路仿真及功能实现;
2. 循环显示电路下载及功能演示;
3. 验收后,上传全部设计文档。
丁启程 No.20120291700091、编写微带线分析和综合程序,并计算:1)基片厚度0.127mm,相对介电常数2.2的50欧姆微带线的宽度;2)基片相对介电常数6.15的微带线,W/h在0.5-10.0之间变化时,特性阻抗Z0的曲线。
要求:1)程序流程图;2)程序代码及注释;3)运行结果解:微带线综合函数:流程图如图输入Z0,h,s判断Z0<44-s是,窄微带线否,宽微带线输出结果程序代码:function w=zonghe(z0,h,s)%z0 表示微带线的特性阻抗;h为基片厚度,相对介电常数sif z0<44-sd=59.95*pi^2/(z0*sqrt(s));r=2/pi*((d-1)-log(2*d-1))+(s-1)/(pi*s)*(log(d-1)+.293-0.517/s); Else%宽微带情况,w为微带宽度h1=z0*sqrt(2*(s+1))/119.9+.5*(s-1)/(s+1)*(log(pi/2)+log(4/pi)/s);%窄微带情况r=(exp(h1)/8-1/(s*exp(h1)))^(-1);endw=r*h;运行结果:输入:w=zonghe(50,.127,2.2)输出:w=0.4954微带线分析函数:流程图如下:输入r,s计算介质的特性阻抗计算有效介电常数计算微带线特性阻抗输出结果程序代码:function Z=analyze(r,s)% r=w/h;%宽高比%计算无色散微带均匀媒质微带线阻抗f=6+(2*pi-6)*exp(-(30.666./r).^0.7528);z01=376.73/(2*pi)*log(f./r+sqrt(1+(2./r).^2));%计算有效介电常数ea=1+1/49*log((r.^4+(r/52).^2)./(r.^4+.432))+log(1+(r/18.1).^3)/18.7; b=.564*((s-0.9)/(s+3))^053;s1=(s+1)/2+(s-1)/2*(1+10./r).^(a*b);%计算微带的特性阻抗z0=z01./sqrt(s1);Z=z0;调用程序:clc;clear all;closer=0.5:0.05:10;s=6.15;y=analyze(r,s);plot(r,y)xlabel('w/h')ylabel('Z0')运行结果:2、设一晶体管的S11和S22的测试值分别为:试用单向化等效电路模型分别求出其输入和输出等效电路(要求在6GHz处精确匹配,测试系统的特性阻抗为50Ω)。
EDA技术课程大作业设计题目:八位全加器设计院系:电子信息与电器工程学院学生姓名:学号:200902070002班级:09电信专升本2010 年12 月8 日八位全加器设计1.设计背景和设计方案1.1设计背景近年来,由于EDA技术迅猛发展,已成为电子领域的一项重要技术。
设计方法也多种多样。
本文用EDA技术作为开发手段,用图形输入设计方法,实现一个八位加法器的设计,并进行了系统仿真。
八位加法器的构成有两种方法:并行进位和串行进位方式。
并行进位加法器设有进位产生逻辑,运算速度较快;串行进位方式是将低位加法器的进位输出与相邻的高位加法器的进位输入信号相连,将全加器级联构成多位加法器。
并行进位加法器通常比串行级联占用更多的资源。
随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大。
因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。
1.2设计方案本实验采用串行级联的方式构成八位加法器。
该八位加法器由八个一位全加器构成,加法器间的进位由串行方式实现,即将低位加法器的进位输出与相邻的高位加法器的最低进位输入信号相连。
原理图编辑如下:图一八位全加器设计原理图2. 方案实施2.1 半加器设计采用图形输入设计方法,实现半加器的设计。
在D盘上建立本实验文件夹,取名为adder8。
打开Quartus II,进入原理图输入编辑窗口。
分别调入and2,not,xnor和输入输出引脚input和output,并按照下图连接好电路。
然后分别修改input和output的引脚名为a、b、co和so。
把该文件名改为h_adder,并保存在adder8文件夹中。
保存后,把该文件转换为元件符号存盘。
图二半加器设计原理图2.2(宋体四号,加粗)一位全加器设计(宋体小四,1.5倍行距)重新打开一个原理图编辑窗口,调入h_adder、or2、input和output,连接好一位全加器电路图。
修改input和output的引脚名,并把文件名修改为f_adder后存盘。
EDA设计大作业姓名:学号: 0211时间:2013年12月汽车尾灯控制器设计一、设计目的:通过实践深入理解状态机原理,了解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。
通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。
通过对实用汽车尾灯控制器的设计,巩固和综合运用所学知识,提高分析、解决EDA技术实际问题的独立工作能力。
要求如下:(1)汽车尾部左右两侧各有多盏指示灯。
(2)汽车正常行驶时指示灯都不亮。
(3)汽车右转弯时,右侧的一盏指示灯亮。
(4)汽车左转弯时,左侧的一盏指示灯亮。
(5)汽车刹车时,左右两侧的一盏指示灯同时亮。
(6)汽车在夜间行驶时,左右两侧有指示灯同时一直亮,供照明使用。
二、实现方案:1、设计思路:a.汽车正常行驶时所有指示灯都不亮;b.当汽车向右转弯时,汽车右侧的指示灯RD1亮;c.当汽车向左侧转弯时,汽车左侧的指示灯LD1亮;d.当汽车刹车时,汽车右侧的指示灯RD2和汽车左侧的指示灯LD2同时亮;e.当汽车在夜间行驶时,汽车右侧的指示灯RD3和汽车左侧的指示灯LD3同时一直亮。
通过设置系统的输入信号,系统时钟信号CLK,汽车左转弯控制信号LEFT,汽车右转弯控制信号RIGHT,刹车信号BRAKE,夜间行驶信号NIGHT和系统的输出信号:汽车左侧3盏指示灯LD1、LD2、LD3和汽车右侧3盏指RD1、RD2、RD3实现以上功能。
2、时钟分频模块:程序设计如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity SZ isport(clk:in std_logic;cp:out std_logic);end entity;architecture one of SZ issignal count:integer range 0 to 3999999:=0; beginprocess(clk)beginif rising_edge(clk)then if count<2000000 thencount<=count+1;cp<='0';elsif count<3999999 thencount<=count+1;cp<='1';elsif count=3999999 thencount<=0;cp<='0';end if;end if;end process;end architecture;仿真结果:3、主控模块:程序设计如下:ARCHITECTURE ART OF CTRL ISBEGINNIGHT_LED<=NIGHT;BRAKE_LED<=BAKE;PROCESS(LEFT,RIGHT)VARIABLE TEMP:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINTEMP:=LEFT & RIGHT;CASE TEMP ISWHEN "00" =>LP<='0';RP<='0';LR<='0';WHEN "01" =>LP<='0';RP<='1';LR<='0';WHEN "10" =>LP<='1';RP<='0';LR<='0';WHEN OTHERS=>LP<='0';RP<='0';LR<='1';END CASE;END PROCESS;END ART;仿真结果:4、左灯控制模块:程序设计如下:ARCHITECTURE ART OF LC ISBEGINLEDB<=BRAKE;LEDN<=NIGHT;PROCESS(CLK,LP,LR)BEGINIF CLK'EVENT AND CLK = '1' THENIF(LR ='0')THENIF(LP = '0')THENLEDL<='0';ELSELEDL<='1';END IF;ELSELEDL <='0';END IF;END IF;END PROCESS;END ART;仿真结果:5. 右灯控制模块:程序设计如下:ARCHITECTURE ART OF RC ISBEGINLEDB<=BRAKE;LEDN<=NIGHT;PROCESS(CLK,RP,LR)BEGINIF CLK'EVENT AND CLK = '1' THENIF(LR = '0')THENIF(RP = '0')THENLEDR <='0';ELSELEDR <= '1';END IF;ELSELEDR <='0';END IF;END IF;END PROCESS;END ART;仿真结果:6、系统整体设计图:顶层文件:Library ieee;Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity tp isPort(clk:in std_logic;Left:in std_logic;Right:in std_logic;Brake:in std_logic;Night:in std_logic;Ld1,Ld2,Ld3:out std_logic;Rd1,Rd2,Rd3:out std_logic); End;Architecture bh of tp isComponent sz isPort(clk:in std_logic;Cp:out std_logic);End component;Component ctrl isPort(left,right,brake,night:in std_logic;Lp,rp,lr,brake_led,night_led:out std_logic);End component;Component lc isPort(clk,lp,lr,brake,night:in std_logic;Ledl,ledb,ledn:out std_logic);End component;Component rc isPort(clk,rp,lr,brake,night:in std_logic;Ledr,ledb,ledn:out std_logic);End component;Signal tmp0,tmp1,tmp2,tmp3,tmp4:std_logic;Signal err0,err1,err2,err3,err4,err5:std_logic;signal bm:std_logic;BeginU1:sz port map(clk,bm);U2:ctrl port map(left,right,brake,night,tmp0,tmp1,tmp2,tmp3,tmp4); U3:lc port map(clk,tmp0,tmp2,tmp3,tmp4,err0,err1,err2);U4:rc port map(clk,tmp1,tmp2,tmp3,tmp4,err3,err4,err5);Ld1<=err0 and bm;Ld2<=err1;Ld3<=err2;Rd1<=err3 and bm;Rd2<=err4;Rd3<=err5;End;仿真结果:上图中RIGHT,LEFT,NIGHT,BRAKE 为输入信号,RIGHT = 1表示右转,LEFT = 1表示左转,NIGHT = 1表示夜间行路,BRAKE = 1表示刹车。
RD1,RD2,RD3为输出信号,表示汽车右侧的三盏灯。
LD1,LD2,LD3为输出信号,表示汽车左侧的三盏灯。
如图所示:当RIGHT = 1时,RD1表示右侧灯亮,当LEFT = 1时,LD1表示左侧灯亮,当NIGHT = 1时,LD2,RD2输出均为1,表示左,右两侧各有一盏灯亮。
当BRAKE = 1时,LD3,RD3输出均为1,表示左,右两侧各有一盏灯亮。
三、心得体会:理论联系实际。
本次课程设计不仅让我们灵活运用课本知识,也让我们提高了分析问题和解决问题的能力,实际操作能力也提高了。
本设计采用自顶向下设计方法,底层为一些具有独立功能的小模块,从局部到整体,不仅使得系统设计的思路清晰明了,减少了错误的产生,更方便了程序的调试以及系统功能的扩充。
本次EDA设计,我初步学会了采用自顶向下的系统设计方法设计系统,并熟练掌握了利用VHDL语言进行简单的电路模块设计。
在此次设计过程中,不仅要求我们掌握扎实的理论知识,分析问题能从根本原理出发,联系实际解决问题,还要求我们要细心有耐心。
在这次设计中我遇到了一些问题,但通过自己上网查询,老师和同学指导帮助,最后顺利解决。
这次经历使我积累了一些经验,相信对以后学习工作会有一定的帮助!习题:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(s:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --输入选择信号 a,b,c,d:IN STD_LOGIC; --输入信号y:OUT STD_LOGIC);--输出端END ENTITY;ARCHITECTURE ART OF MUX41 ISBEGINPROCESS(s)BEGINIF (S="00") THEN y<=a;ELSIF (S="01") TH EN y<=b;ELSIF (S="10") TH EN y<=c;ELSIF (S="11") TH EN y<=d;ELSE y<=NULL;END IF;EDN PROCESS;END ART;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(s:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --输入选择信号 a,b,c,d:IN STD_LOGIC; --输入信号y:OUT STD_LOGIC);--输出端END MUX41;ARCHITECTURE ART OF MUX41 ISBEGINPROCESS(s)BEGINCASE s ISWHEN “00” => y<=a;WHEN “01” => y<=b;WHEN “10” => y<=c;WHEN “11” => y<=d;WHEN OTHERS =>NULL;END CASE;END PROCESS;END ART;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX221 ISPORT(a1,a2,a3:IN STD_LOGIC_VECTOR(1 DOWNTO 0); --输入信号 s0,s1:IN STD_LOGIC;outy:OUT STD_LOGIC);--输出端END ENTITY;ARCHITECTURE ONE OF MUX221 ISSIGNAL tmp : STD_LOGIC;BEGINPR01:PROCESS(s0)BEGINIF s0=”0” THEN tmp<=a2;ELSE tmp<=a3;END IF;END PROCESS;PR02:PROCESS(s1)BEGINIF s1=”0” THEN outy<=a1;ELSE outy<=tmp;END IF;END PROCESS;END ARCHITECTURE ONE;END CASE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY MULTI ISPORT(CL:IN STD_LOGIC; --输入选择信号 CLK0:IN STD_LOGIC; --输入信号 OUT1:OUT STD_LOGIC);--输出端END ENTITY;ARCHITECTURE ONE OF MULTI IS SIGNAL Q : STD_LOGIC;BEGINPR01: PROCESS(CLK0)BEGINIF CLK ‘EVENT AND CLK=’1’THEN Q<=NOT(CL OR Q);ELSEEND IF;END PROCESS;PR02: PROCESS(CLK0)BEGINOUT1<=Q;END PROCESS;END ARCHITECTURE ONE;END PROCESS;底层文件1:or2a.VHD实现或门操作LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY or2a ISPORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END ENTITY or2a;ARCHITECTURE one OF or2a ISBEGINc <= a OR b;END ARCHITECTURE one;底层文件2:h_subber.VHD实现一位半减器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY h_subber ISPORT(x,y:IN STD_LOGIC;diff,s_out::OUT STD_LOGIC);END ENTITY h_subber;ARCHITECTURE ONE OF h_subber ISSIGNAL xyz: STD_LOGIC_VECTOR(1 DOWNTO 0); BEGINxyz <= x & y;PROCESS(xyz)BEGINCASE xyz ISWHEN "00" => diff<='0';s_out<='0';WHEN "01" => diff<='1';s_out<='1';WHEN "10" => diff<='1';s_out<='0';WHEN "11" => diff<='0';s_out<='0';WHEN OTHERS => NULL;END CASE;END PROCESS;END ARCHITECTURE ONE;顶层文件:f_subber.VHD实现一位全减器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY f_subber ISPORT(x,y,sub_in:IN STD_LOGIC;diffr,sub_out:OUT STD_LOGIC);END ENTITY f_subber;ARCHITECTURE ONE OF f_subber ISCOMPONENT h_subberPORT(x,y:IN STD_LOGIC;diff,S_out:OUT STD_LOGIC);END COMPONENT;COMPONENT or2aPORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;SIGNAL d,e,f: STD_LOGIC;BEGINu1: h_subber PORT MAP(x=>x,y=>y,diff=>d,s_out=>e);u2: h_subber PORT MAP(x=>d,y=>sub_in,diff=>diffr,s_out=>f); u3: or2a PORT MAP(a=>f,b=>e,c=>sub_out);END ARCHITECTURE ONE;END ARCHITECTURE ART;MAX3256顶层文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MAX3256 ISPORT (INA,INB,INCK: IN STD_LOGIC;INC: IN STD_LOGIC;E,OUT:OUT STD_LOGIC);END ENTITY MAX3256;ARCHITECTURE ONE OF MAX3256 ISCOMPONENT LK35 --调用LK35声明语句PORT(A1,A2:IN STD_LOGIC;CLK:IN STD_LOGIC;Q1,Q2:OUT STD_LOGIC);END COMPONENT;COMPONENT D --调用D触发器声明语句PORT(D,C:IN STD_LOGIC;CLK:IN STD_LOGIC;Q:OUT STD_LOGIC);END COMPONENT;COMPONENT MUX21--调用二选一选择器声明语句PORT(B,A:IN STD_LOGIC;S:IN STD_LOGIC;C:OUT STD_LOGIC);END COMPONENT;SIGNAL AA,BB,CC,DD: STD_LOGIC;BEGINu1: LK35 PORT MAP(A1=>INA,A2=>INB,CLK=INCK, Q1=>AA,Q2=>BB); u2: D PORT MAP(D=>BB;CLK=>INCK,C=>INC,Q=>CC);u3: LK35 PORT MAP (A1=>BB,A2=>CC,CLK=INCK, Q1=>DD,Q2=>OUT1);u4: MUX21 PORT MAP (B=>AA,A=>DD,S=>BB,C=>E);END ARCHITECTURE ONE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT16 ISPORT(CLK,RST,EN:IN STD_LOGIC;CHOOSE:IN BIT;SETDATA:BUFFER INTEGER RANCE 65535 DOWNTO 0;COUT: BUFFER INTEGER RANCE 65535 DOWNTO 0);END CNT16;ARCHITECTURE ONE OF CNT16 ISBEGINPROCESS(CLK,RST,SDATA)VARIABLE QI:STD_LOGIC_VECTOR(65535 DOWNTO 0); BEGINIF RST='1' THEN --计数器异步复位QI:=(OTHERS=>'0');ELSIF SET=’1’ THEN--计数器异步置位QI:=SETDATA;ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN=’1’ THEN –检测是否允许计数IF CHOOSE=’1’ THEN --选择加法计数QI:=QI+1; --计数器加一ELSE QI:=QI-1; --计数器减一END IF;END IF;END IF;COUT<=QI;--将计数值向端口输出END PROCESS;END ONE;。