基于CADENCE的二选一数据选择器设计
EDA技术与应用的二选一选择器
EDA 技术与应用的二选一选择器学院名称: 东方学院专 业: 电子信息工程班 级:学 号:姓 名:指导教师姓名:指导教师职称:2007年 4 月24日JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 本科课程设计(论文)二选一选择器一.设计目的1.学习VHDL编程;2.进一步熟悉实验箱电路;二.设计指标及功能要求设计指标:(1)对所设计的小系统功能正确分析;(2)基于VHDL语言描述系统的功能;(3)在QUARTUSⅡ环境中编译通过;(4)仿真通过,并得到正确的波形;(5)给出相应设计报告;功能要求:1.用VHDL语言设计可控加减计数器;2.至少两层电路,底层有三种元件;3.使得其执行可控加,减记数;三.实验步骤1.建立Light目录,用于存放本实验所建立的文本2.点击“File New”,在出现的对话框中,选择“VHDL File”进入文本编辑器。
3.输入VHDL语言源文件。
4.点“Save as”,保存该源文件。
5.进行编译,点“start compilation”,若语句有错会有提示,修改后重新编译直到无错误。
6.点“File New”,选择“Vector Waveform File”,建立仿真输入文件.7.点“End time”,输入终止时间(表示波形长度).点“light”将所有信号选中或部分选中。
点“start simulation”.运行波形,直至正确。
四、电路工作原理首先,用异或门控制输入端,加一个脉冲信号。
在其后方分别加上加法计数器和减法计数器:来一个脉冲,当异或门输出为0时,减法计数器开始工作,当输出为1时,加法计数器工作。
这样,利用给异或门加不同的信号来控制加减计数器。
五.各子模块设计与调试过程library ieee;use ieee.std_logic_1164.all;entity ora isport(a:in std_logic;b:out std_logic);end entity;architecture one of ora isbeginb<=not a;end architecture;library ieee;use ieee.std_logic_1164.all;entity noxa isport(a,b:in std_logic;c:out std_logic);end entity;architecture one1 of noxa isbeginc <= a xor b;end architecture;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10a isport(CP,EN:in std_logic;q:out std_logic_vector(3 downto 0)); end cnt10a;architecture one of cnt10a isbeginprocess(CP,EN)variable q1:std_logic_vector(3 downto 0);beginif(CP'event and CP='1') thenif EN='1' thenif(q1<9) then q1:=q1+1;else q1:=(others=>'0');end if;end if;end if;q<=q1;end process;end one;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity cnt10b isport(CP,EN:in std_logic;q: out std_logic_vector(3 downto 0)); end cnt10b;architecture one of cnt10b isbeginprocess(CP,EN)variable q1:std_logic_vector(3 downto 0);beginif(CP'event and CP='1') thenif EN='1' thenif(q1=0) then q1:="1001";else q1:=q1-1;end if;end if;end if;q<=q1;end process;end;library ieee;use ieee.std_logic_1164.all;entity kekong isport(a1,b1,cp1:in std_logic;cq1,cq2:out std_logic_vector(3 downto 0)); end entity;architecture wowo of kekong iscomponent noxa isport(a,b:in std_logic;c:out std_logic);end component;component ora isport(a:in std_logic;b:out std_logic);end component;component cnt10a isport(CP,EN:in std_logic;q:out std_logic_vector(3 downto 0)); end component;component cnt10b isport(CP,EN:in std_logic;q: out std_logic_vector(3 downto 0)); end component;signal k,j:std_logic;beginu1:noxa port map(a=>a1,b=>b1,c=>k);u2:ora port map(a=>k,b=>j);u3:cnt10a port map(EN=>k,CP=>CP1,Q=>cq1);u4:cnt10b port map(EN=>j,CP=>CP1,q=>cq2); end architecture wowo;六、波形调试:七、感想:通过对EDA程序的使用,我发现该程序的实用性!其次,对数字电路的知识也不能遗忘,还要正确使用VHDL语言,通过调试能正确的改错!并且对调试后的波形进行正确的分析。
2输入数据选择器(mux2)集成电路课设报告
课程设计任务书学生姓名:助人为乐专业班级:不计得失指导教师:一定过工作单位:信息工程学院题目: 二输入数据选择器版图设计初始条件:计算机、ORCAD软件、L-EDIT软件要求完成的主要任务:1、课程设计工作量:2周2、技术要求:(1)学习ORCAD软件、L-EDIT软件软件。
(2)设计一个二输入数据选择器电路。
(3)利用ORCAD软件、L-EDIT软件对该电路进行系统设计、电路设计和版图设计,并进行相应的设计、模拟和仿真工作。
3、查阅至少5篇参考文献。
按《武汉理工大学课程设计工作规范》要求撰写设计报告书。
全文用A4纸打印,图纸应符合绘图规范。
时间安排:2013.11.22布置课程设计任务、选题;讲解课程设计具体实施计划与课程设计报告格式的要求;课程设计答疑事项。
2013.11.25-11.27学习ORCAD软件、L-EDIT软件,查阅相关资料,复习所设计内容的基本理论知识。
2013.11.28-12.5对二输入数据选择器电路进行设计仿真工作,完成课设报告的撰写。
2013.12.6提交课程设计报告,进行答辩。
指导教师签名:年月日系主任(或责任教师)签名:年月日目录1.绪论 (2)2.软件简介 (3)2.1Cadence简介 (3)2.2L-edit简介 (3)3.二输入多路选择器电路设计及仿真 (4)3.1数据选择器原理 (4)3.2电路原理图的绘制 (5)3.3电路图仿真 (6)4.集成电路版图设计 (7)4.1CMOS数字电路基本单元版图设计 (7)4.1.1反相器版图设计 (7)4.1.2与非门版图设计 (8)4.2整体版图设计 (9)4.3设计规则的验证及结果 (9)5.总结 (10)参考文献 (11)摘要I C(“集成电路”)产业是全球高新技术产业的前沿与核心,是最具活力和挑战性的战略产业。
自2000年来,在国家政策的大力支持下,我国集成电路产业得到了长足的发展,而作为集成电路产业最前沿的设计业更是呈现出“百花齐放”的繁荣景象。
基于FPGA的2选1多路选择器设计
基于FPGA的2选1多路选择器设计1. 项⽬介绍 多路选择器,也叫数据选择器或多路开关,在多路数据传送过程中,能够根据需要将其中任意⼀路选出来的电路。
数据选择器⽤于控制有效数据的输出,能够通过地址选择线来选定相应的通道作为输出,提⾼了数据的传输效率。
(数据分配器⽤于数据的传输途径,在信号传输过程中能够通过地址选择线选择传输信道)。
2. 设计要求 设计⼀个2选1多路选择器,输⼊有两个单bit信号,和⼀个单bit的选择信号。
当选择信号为低电平时,将第⼀路信号输出,当选择信号为⾼电平时,将第⼆路信号输出。
3. 设计原理 该设计命名为mux2_1,第⼀路信号命名为dataa,第⼆路信号命名为datab,选择信号命名为sel,输出信号命名为odata,系统框图如下图所⽰。
根据设计要求,得真值表:dataa datab sel odata00000010010001111001101011011111 根据真值表,得到逻辑表达式: 转化为Verilog表达式为Odata = datab&sel | dataa&(~sel);4. 设计实现1module mux2_1(23input wire dataa,4input wire datab,5input wire sel,67output wire odata8 );910assign odata = (datab & sel) | (dataa & (~sel));1112endmodule5. 仿真验证1 `timescale 1ns/1ps23module mux2_1_tb();45reg dataa;6reg datab;7reg sel;89wire odata;1011 mux2_1 mux2_1_inst(12 .dataa (dataa),13 .datab (datab),14 .sel (sel),15 .odata (odata)16 );1718initial begin19 dataa = 1'b0; datab = 1'b0; sel = 1'b0; #20;20 dataa = 1'b0; datab = 1'b0; sel = 1'b1; #20;21 dataa = 1'b0; datab = 1'b1; sel = 1'b0; #20;22 dataa = 1'b0; datab = 1'b1; sel = 1'b1; #20;23 dataa = 1'b1; datab = 1'b0; sel = 1'b0; #20;24 dataa = 1'b1; datab = 1'b0; sel = 1'b1; #20;25 dataa = 1'b1; datab = 1'b1; sel = 1'b0; #20;26 dataa = 1'b1; datab = 1'b1; sel = 1'b1; #20; 27end2829endmodule参考资料: (1);。
2选1多路选择器EDA实验报告
2选1多路选择器EDA实验报告EDA实验报告学⽣姓名:asfmla;m 学号:eafvpa[cv专业班级:电⼦3班组合电路设计⼀、实验⽬的熟悉quartusⅡ的VHDL⽂本设计全过程,学习简单组合电路的设计、多层次电路设计、仿真。
⼆、实验内容实验内容:⾸先利⽤quartusⅡ完成2选1多路选择器(例4-3)的⽂本编译输⼊(mux21a.vhd)和仿真测试等步骤,最后在实验系统上硬件测试,验证此设计的功能。
将此多路选择器看成⼀个元件mux21a,利⽤元件例化语句描述成三选⼀,然后进⾏编译、综合、仿真。
引脚锁定以及硬件下载测试。
建议选实验电路模式5,⽤键1(PIO0)控制s0;⽤键2(PIO1)控制s1;a3、a2和a1分别接clock5、clock0和clock2;输出信号outy仍接扬声器spker。
通过短路帽选择clock0接256HZ信号,clock5接1024HZ信号,clock2接8HZ信号。
最后选⾏编译、下载和硬件测试实验。
三、实验器材Quartus II软件。
四、设计思路/原理图五、实验程序实验内容1:⼆选⼀:library ieee;use ieee.std_logic_1164.all;entity mux21a isport(a,b: in std_logic;s: in std_logic;y: out std_logic);end entity;architecture dataflow of mux21a isbeginy<=a when s='0' else b;end architecture;实验内容2:三选⼀library ieee;use ieee.std_logic_1164.all;entity mux31a isport(a1,a2,a3: in std_logic;s0,s1: in std_logic;outy: out std_logic);end entity mux31a;architecture m31a of mux31a iscomponent mux21aport( a,b: in std_logic;s: in std_logic;y: out std_logic);end component;signal tmp: std_logic;beginu1: mux21a port map(a=>a2,b=>a3,s=>s0,y=>tmp);u2: mux21a port map(a=>a1,b=>tmp,s=>s1,y=>outy);end architecture;六、实验步骤在E盘新建⼀个⽂件夹,⽤于存放⼯程。
EDA实验1lxm二选一数据选择器
实验一二选一数据选择器VHDL设计Quartus II 6.0开发环境与EDA实验箱使用一实验目的1.熟悉在Quartus II 6.0环境下原理图输入方法。
2.熟悉Quartus II 6.0环境下编辑、编译综合、仿真的操作方法。
3、掌握利用EDA软件进行电路设计的详细流程;4、熟悉EDA实验箱的基本使用方法。
学会对实验板上的FPGA/CPLD进行编程下载,硬件验证自己的设计项目。
二实验仪器PC机、Quartus II 6.0软件三实验内容1.详细解读教材117页。
2.在QuartusⅡ上输入该设计的原理图,并进行编辑、编译、综合、适配、仿真。
3.给出其所有信号的时序仿真波形。
四实验原理及步骤1.启动Quartus II 6.0软件在桌面上双击Quartus II 6.0图标或者在开始—>所有程序—>Altera—> Quartus II 6.0,如下图2.建立工作库文件夹及工程任何一次设计都是一项工程(Project),所有此工程相关的所有设计文件都需要放在同一个文件夹里。
不同的设计放在不同的文件夹中。
在E盘下建立一个存放本次设计的工程文件夹,比如“shiyan1”。
注意不要使用中文文件夹,文件夹的存放路径也不要包含中文。
注意本实验室计算机C盘和D盘是重启后复原,不要将任何文件和文件夹放置在桌面或者C、D盘下。
初次打开Quartus II 6.0,会有如图提示:选择是的情况下,首先是新工程向导:介绍下一步下一步下一步,选择目标芯片,首先在Family栏选择ACEX1K系列,然后选择此系列的具体芯片:EP1K30TC144-3。
注意不要选成了EP1K30TC144-3。
下一步就点完成。
3.建立文本程序文件选择File菜单下的New或者直接点击工具栏中的新建图标,选择新建文件类型为VHDL File。
接下来另存文件:保存时需更改文件名与项目名称一样,注意保存在同一个工程文件夹下面。
实验六二选一数据选择器的VHDL设计
▪ ▪
多位赋值: temp (7 downto
逐位赋值 4)用<=单“引10号10〞;
信号、变量、常量比照
〔一〕、定义
Signal clk: std_logic; Variable data: std_logic_vector(7 downto 0); Constant width: integer :=7 ;
▪ 说明语句:用于定义构造体中所用的数据对象〔常量 和信号〕和子程序,并对所引用的元件加以说明,但 不能定义变量。
▪ 功能描述语句:有五种类型,可以把它们看成构造体 的五种子构造。这五种语句构造本身是并行语句,但 内部可能含有并行运行的逻辑描述语句或顺序运行的 逻辑描述语句,如进程内部包含的即为顺序语句。
逻辑运算符应用举例 y<=a XOR b; --逻辑表达式 y=a⊕b y<=a AND b AND c AND d;
--逻辑表达式 y=a·b·c·d y<=(a OR b) AND (c OR d);
--逻辑表达式 y=(a+b)·(c+d)
2、关系运算符
= 等于 /= 不等于 < 小于 <= 小于或等于〔也用于信号的赋值操作〕 > 大于 >= 大于或等于
SIGNAL l,m,n,o,p : BOOLEAN ;
...
s<=a and b;
-- integer 不能进展逻辑运算
a<=b AND c;
-- a、b、c的数据类型同属4位长的位矢
量
d<=e OR f OR g ;
-- 两个操作符OR一样,不需括号
h<=(i NAND j)NAND k ; -- NAND必须加括号
信号:实体、构造体、程序包 变量:进程、子程序 常量:实体、构造体、程序包、块、进程、子程序
基于二选一传输门及二选一与非门德L-esit版图设计
二选一数据选择器(基于与非门)1电路图(W/L=0.55μm /0.25μm)
版图:
第一步:引入单元图例(NMOS和PMOS)
第二步:各元件之间的连线
第三步:设置电源端,接地端以及输入断和输出端:
第四步:LVS检查原理图与版图的电气特性结果为
实验二二选一数据选择器(基于传输门)2电路图
实验二二选一数据选择器(基于传输门)2电路图
版图:
第一步:引入单元图例:
第二步,各元件的连接:
第三步,设置电源端,接地端以及输入断和输出端:
第四步:LVS检查原理图与版图的电气特性结果为
(注:范文素材和资料部分来自网络,供参考。
请预览后才下载,期待你的好评与关注。
)。
实验二
FPGA实现二选一数据选择器的设计1 实验目的(1) 熟悉在QuartusⅡ软件平台上建立工作库文件和编辑设计文件的方法。
(2) 熟悉创建工程文件方法。
(3) 熟悉编译前设置和启动全程编译设置的方法。
(4) 熟悉波形编辑器的使用方法(5) 熟悉在QuartusⅡ软件平台上对设计进行仿真的操作全过程(6) 会用VHDL语言设计一个二选一数据选择器。
(7)了解FPGA的开发流程2 实验原理数据选择器又叫“多路开关”。
数据选择器在地址码(或叫选择控制)电位的控制下,从几个数据输入中选择一个并将其送到一个公共的输出端。
本实验在GW48系列SOPC/EDA实验开发系统上,选择模式5,扬声器接Speaker,对于EP1C6/12,对应174脚;a接clock0(256Hz),对应于pin28;b接clock5(1024),对应pin152;在模式5中,键1接PIO0,对应EP1C6/12的第233脚。
在此模式中,每按键一次,输出电平‘1’和‘0’交替出现。
故定义此键控制muax21a的选择s。
引脚分配3 实验设备硬件:GW48系列SOPC/EDA实验开发系统;FPGA芯片型号:Cyclone EP1C6Q240C8 注:EP1C6,表示Cyclone系列及该器件的规模;Q240,表示PQFP封装,240个引脚,C8,表示速度级别。
软件:Quartusii 7.24 实验结果:控制实验箱右下角键1,能控制多路选择器对不同时钟的选择,从而从扬声器中能听到不同音调的声音。
(1)图1 二选一数据选择器时序仿真图(2)图2 硬件调试结果图5 实验步骤(1)新建一个文件夹。
本例中文件夹名为EXPT51_mux21A。
(2)输入源程序,打开计算机桌面上图标。
新建工程设计文件名为mux21a.vhd。
在新建的VHDL模型窗口下编写的源程序如下。
(3) 创建工程及全程编译完成源代码输入后即可创建工程。
然后进行全程编译,检查设计程序是否正确(方法参照实验一基本设计流程)。
EDA中QUARTUSⅡ的程序设计代码
二选一数据选择器 (1)四选一数据选择器 (2)八位奇偶校验器 (3)十进制加法计数器 (4)四位二进制计数器 (5)七段显示译码器 (6)八位乘法器 (7)十六进制键盘编码器 (8)3线-8线译码器 (9)8线-3线优先编码器 (10)十六选一数据选择器 (11)八位一进制数据比较器 (12)JK触发器 (13)D触发器 (14)T触发器 (15)三态输出8D锁存器: (16)8D锁存器 (17)三态输出4D锁存器 (18)四D锁存器 (19)八位双向移位寄存器 (20)八位左向移位寄存器 (21)八位右向移位寄存器 (22)八位二进制加减计数器 (23)六进制计数器 (24)十进制计数器 (25)带使能同步清0增1计数器: (26)带使能同步清0增1/减1的3位计数器: (27)数据比较器 (28)1.二选一数据选择器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX21 ISPORT( A,B:IN STD_LOGIC;S:IN STD_LOGIC;Y:OUT STD_LOGIC );END MUX21;ARCHITECTURE EXAMPLE3 OF MUX21 IS BEGINY<=A WHEN S='0'ELSE B;END EXAMPLE3;2.四选一数据选择器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(A,B,C,D:IN STD_LOGIC;S1,S2:IN STD_LOGIC;Z:OUT STD_LOGIC);END MUX41;ARCHITECTURE a OF MUX41 ISSIGNAL S:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGINS <=S1 & S2;PROCESS(S1,S2,A,B,C,D)BEGINCASE S ISWHEN "00"=> Z<=A;WHEN "01"=> Z<=B;WHEN "10"=> Z<=C;WHEN "11"=> Z<=D;WHEN OTHERS => Z<='X';END CASE;END PROCESS;END a;3.八位奇偶校验器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY p_check ISPORT (a:IN STD_LOGIC_VECTOR (7 DOWNTO 0);y:OUT STD_LOGIC);END p_check;ARCHITECTURE arch OF p_check ISBEGINPROCESS(a)V ARIABLE temp:STD_LOGIC;BEGINtemp:='0'; --偶校验初始值设为0,奇校验初始值设为1 FOR n IN 0 TO 7 LOOPtemp:=temp XOR a(n);END LOOP;y<=temp;END PROCESS;END arch;4.十进制加法计数器LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY cnt10y IsPORT(clr: IN S TD_LOGIC;clk: IN STD_LOGIC;cnt:BUFFER INTEGER RANGE 9 DOWNTO 0); end cnt10y;ARCHITECTURE a OF cnt10y IsBEGINPROCESS (clr, clk)BEGINIF clr = '0' THENcnt <= 0;ELSIF clk'EVENT AND clk = '1' THENif(cnt=9) thencnt<=0;elsecnt<=cnt+1;END IF;END IF;END PROCESS;END a;5.四位二进制计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cnt4e ISPORT(CLK,ENA:IN STD_LOGIC;COUT:OUT STD_LOGIC;q:BUFFER INTEGER RANGE 0 TO 15); END cnt4e;ARCHITECTURE ONE OF cnt4e ISBEGINPROCESS(CLK,ENA)BEGINIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENIF q=15 THEN q<=0;COUT<='0';ELSIF q=14 THEN q<=q+1;COUT<='1';ELSE q<=q+1;END IF;END IF;END IF;END PROCESS;END;6.七段显示译码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dec7s ISPORT(A: IN BIT_VECTOR (3 DOWNTO 0);LED7S:OUT BIT_VECTOR (7 DOWNTO 0)); END;ARCHITECTURE ONE OF dec7s ISBEGINPROCESS(A)BEGINCASE A(3 DOWNTO 0) ISWHEN "0000"=>LED7S<="00111111";WHEN "0001"=>LED7S<="00000110";WHEN "0010"=>LED7S<="01011011";WHEN "0011"=>LED7S<="01001111";WHEN "0100"=>LED7S<="01100110";WHEN "0101"=>LED7S<="01101101";WHEN "0110"=>LED7S<="01111101";WHEN "0111"=>LED7S<="00000111";WHEN "1000"=>LED7S<="01111111";WHEN "1001"=>LED7S<="01101111";WHEN "1010"=>LED7S<="01110111";WHEN "1011"=>LED7S<="01111100";WHEN "1100"=>LED7S<="00111001";WHEN "1101"=>LED7S<="01011110";WHEN "1110"=>LED7S<="01111001";WHEN "1111"=>LED7S<="01110001";END CASE;END PROCESS;END;7.八位乘法器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mul ISPORT(a,b : IN integer range 0 to 255;q : OUT integer range 0 to 65535 ); END mul;ARCHITECTURE one OF mul ISBEGINq<=a*b ;END one;8.十六进制键盘编码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY hcoder ISPORT(x,y:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END hcoder;ARCHITECTURE struc OF hcoder ISBEGINPROCESS (x,y)V ARIABLE xy:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINxy:=(X & y);CASE xy ISWHEN B"11101110" => S <= B"0000";WHEN B"11101101" => S <= B"0001";WHEN B"11101011" => S <= B"0010";WHEN B"11100111" => S <= B"0011";WHEN B"11011110" => S <= B"0100";WHEN B"11011101" => S <= B"0101";WHEN B"11011011" => S <= B"0110";WHEN B"11010111" => S <= B"0111";WHEN B"10111110" => S <= B"1000";WHEN B"10111101" => S <= B"1001";WHEN B"10111011" => S <= B"1010";WHEN B"10110111" => S <= B"1011";WHEN B"01111110" => S <= B"1100";WHEN B"01111101" => S <= B"1101";WHEN B"01111011" => S <= B"1110";WHEN B"01110111" => S <= B"1111";WHEN OTHERS => S <= B"0000";END CASE;END PROCESS ;END struc;9.3线-8线译码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY decoder ISPORT ( a,b,c,ena:IN BIT;y:OUT BIT_VECTOR(7 DOWNTO 0)); END decoder;ARCHITECTURE ONE OF decoder ISBEGINPROCESS (a,b,c,ena)V ARIABLE cba:BIT_VECTOR(2 DOWNTO 0);BEGINcba:=(c & b & a);IF(ena ='1') THEN y<="11111111";ELSECASE(cba) ISWHEN "000" => y <= "11111110";WHEN "001" => y <= "11111101";WHEN "010" => y <= "11111011";WHEN "011" => y <= "11110111";WHEN "100" => y <= "11101111";WHEN "101" => y <= "11011111";WHEN "110" => y <= "10111111";WHEN "111" => y <= "01111111";WHEN OTHERS=>NULL;END CASE;END IF;END PROCESS;END ONE;10.8线-3线优先编码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY coder ISPORT ( a: IN STD_LOGIC_VECTOR(7 DOWNTO 0);y : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ); END coder;ARCHITECTURE one OF coder ISBEGINPROCESS (a)BEGINIF (a(7)='0') THEN Y <= "111" ;ELSIF (a(6)='0') THEN y <= "110" ;ELSIF (a(5)='0') THEN y <= "101" ;ELSIF (a(4)='0') THEN y <= "100" ;ELSIF (a(3)='0') THEN y <= "011" ;ELSIF (a(2)='0') THEN y <= "010" ;ELSIF (a(1)='0') THEN y <= "001" ;ELSIF (a(0)='0') THEN y <= "000" ;ELSE y <= "000" ;END IF ;END PROCESS ;END one;11.16选一数据选择器(CASE)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux16_1 ISPORT (s0,s1,s2,s3,ena:IN STD_LOGIC;a:IN STD_LOGIC_VECTOR(15 DOWNTO 0);y:OUT STD_LOGIC);END mux16_1;ARCHITECTURE one OF mux16_1 ISSIGNAL s :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINs<=s0&s1&s2&S3;PROCESS(s0,s1,s2,s3,ena)BEGINIF ena='1' THEN y<='0';ELSECASE S ISWHEN "0000"=> y <=a(0); WHEN "0001"=> y <=a(1);WHEN "0010"=> y <=a(2); WHEN "0011"=> y <=a(3);WHEN "0100"=> y <=a(4); WHEN "0101"=> y <=a(5);WHEN "0110"=> y <=a(6); WHEN "0111"=> y <=a(7);WHEN "1000"=> y <=a(8); WHEN "1001"=> y <=a(9);WHEN "1010"=> y <=a(10); WHEN "1011"=> y <=a(11);WHEN "1100"=> y <=a(12); WHEN "1101"=> y <=a(13);WHEN "1110"=> y <=a(14); WHEN "1111" => y <=a(15);WHEN OTHERS =>y <='X'; END CASE;END IF;END PROCESS;END one;16选一数据选择器(条件信号)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux16_1 ISPORT (s0,s1,s2,s3,ena:IN STD_LOGIC;a:IN STD_LOGIC_VECTOR(15 DOWNTO 0);y:OUT STD_LOGIC);END mux16_1;ARCHITECTURE one OF mux16_1 ISSIGNAL s :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINs<=s0&s1&s2&S3;y<=a(0) WHEN s="0000" ELSEa(1) WHEN s="0001" ELSEa(2) WHEN s="0010" ELSEa(3) WHEN s="0011" ELSEa(4) WHEN s="0100" ELSEa(5) WHEN s="0101" ELSEa(6) WHEN s="0110" ELSEa(7) WHEN s="0111" ELSEa(8) WHEN s="1000" ELSEa(9) WHEN s="1001" ELSEa(10) WHEN s="1010" ELSEa(11) WHEN s="1011" ELSEa(12) WHEN s="1100" ELSEa(13) WHEN s="1101" ELSEa(14) WHEN s="1110" ELSEa(15);END one;16选一数据选择器(选择信号)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux16_1 ISPORT (s0,s1,s2,s3,ena:IN STD_LOGIC;a:IN STD_LOGIC_VECTOR(15 DOWNTO 0);y:OUT STD_LOGIC);END mux16_1;ARCHITECTURE one OF mux16_1 ISSIGNAL s :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINs<=s0&s1&s2&S3;WITH s SELECTy<=a(0) WHEN "0000" ,a(1) WHEN "0001" ,a(2) WHEN "0010" ,a(3) WHEN "0011" ,a(4) WHEN "0100" ,a(5) WHEN "0101" ,a(6) WHEN "0110" ,a(7) WHEN "0111" ,a(8) WHEN "1000" ,a(9) WHEN "1001" ,a(10) WHEN "1010",a(11) WHEN "1011",a(12) WHEN "1100",a(13) WHEN "1101",a(14) WHEN "1110",a(15) WHEN "1111",'X' WHEN OTHERS;END one;12.8位一进制数据比较器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY comp8 ISPORT (a,b : IN STD_LOGIC_VECTOR(7 DOWNTO 0);fa,fb,fe : OUT STD_LOGIC);END comp8;ARCHITECTURE one OF comp8 IS BEGINPROCESS(a,b)BEGINIF a > b THEN fa <= '1';fb <= '0';fe <= '0';ELSIF a < b THEN fa <= '0';fb <= '1';fe <= '0';ELSIF a = b THEN fa <= '0';fb <= '0';fe <= '1';END IF;END PROCESS;END one;13.JK触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY myjkff ISPORT(j,k,clr:IN STD_LOGIC;clk:IN STD_LOGIC;q,qn:BUFFER STD_LOGIC);END myjkff;ARCHITECTURE one OF myjkff ISBEGINPROCESS(j,k,clr,clk)V ARIABLE jk:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINjk:=(j & k);IF clr='0' THENq<='0';qn<='1';ELSIF clk'EVENT AND clk='0' THEN CASE jk ISWHEN "00" => q <=q; qn <= qn;WHEN "01" => q <= '0'; qn <= '1';WHEN "10" => q <= '1'; qn <= '0';WHEN "11" => q <= NOT q; qn <= NOT qn;WHEN OTHERS => NULL;END CASE ;END IF;END PROCESS;END one;14.D触发器LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 ISPORT (CLK : IN STD_LOGIC ;D : IN STD_LOGIC ;Q : OUT STD_LOGIC ); END ;ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; BEGINPROCESS (CLK)BEGINIF CLK'EVENT AND CLK = '1'THEN Q1 <= D ;END IF;Q <= Q1 ;END PROCESS ;END bhv;15.T触发器library ieee;use ieee.std_logic_1164.all;entity dai isport(t,clk:in std_logic;q,qn:out std_logic);end dai;architecture behav of dai issignal q_temp:std_logic;--signal jk:std_logic_vector(1 downto 0); beginprocess(t,clk)beginif clk'event and clk='1'thencase t iswhen '0'=>q_temp<=q_temp;when '1'=>q_temp<= not q_temp;when others=>q_temp<=null;end case;q<=q_temp;qn<=not q_temp;end if;end process;end behav;16.三态输出8D锁存器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY latch8 ISPORT(clr,clk,ena,oe:IN STD_LOGIC;d:IN STD_LOGIC_VECTOR(7 DOWNTO 0);q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0)); END latch8;ARCHITECTURE one OF latch8 ISSIGNAL q_temp:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINu1:PROCESS(clk,clr,ena,oe)BEGINIF clr='0' THEN q_temp <= "00000000";ELSIF clk'EVENT AND clk='1' THENIF (ena='1') THENq_temp <= d;END IF;END IF;IF oe='1' THEN q <= "ZZZZZZZZ";ELSE q <= q_temp;END IF;END PROCESS u1;END one;17.八D锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY l8 ISPORT(clr,clk,ena:IN STD_LOGIC;d:IN STD_LOGIC_VECTOR(7 DOWNTO 0);q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0)); END l8;ARCHITECTURE one OF l8 ISSIGNAL q_temp:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINu1:PROCESS(clk,clr,ena)BEGINIF clr='0' THEN q_temp <= "00000000";ELSIF clk'EVENT AND clk='1' THENIF (ena='1') THENq_temp <= d;END IF;END IF;q <= q_temp;END PROCESS u1;END one;18.三态输出4D锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY latch4 ISPORT(clr,clk,ena,oe:IN STD_LOGIC;d:IN STD_LOGIC_VECTOR(3 DOWNTO 0);q:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END latch4;ARCHITECTURE one OF latch4 ISSIGNAL q_temp:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINu1:PROCESS(clk,clr,ena,oe)BEGINIF clr='0' THEN q_temp <= "0000";ELSIF clk'EVENT AND clk='1' THENIF (ena='1') THENq_temp <= d;END IF;END IF;IF oe='1' THEN q <= "ZZZZ";ELSE q <= q_temp;END IF;END PROCESS u1;END one;19.四D锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY l4 ISPORT(clr,clk,ena:IN STD_LOGIC;d:IN STD_LOGIC_VECTOR(3 DOWNTO 0);q:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END l4;ARCHITECTURE one OF l4 ISSIGNAL q_temp:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINu1:PROCESS(clk,clr,ena)BEGINIF clr='0' THEN q_temp <= "0000";ELSIF clk'EVENT AND clk='1' THENIF (ena='1') THENq_temp <= d;END IF;END IF;q <= q_temp;END PROCESS u1;END one;20.8位双向移位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY rlshift ISPORT(clr,lod,clk,s,dir,dil:IN BIT;d:IN BIT_VECTOR(7 DOWNTO 0);q:BUFFER BIT_VECTOR(7 DOWNTO 0)); END rlshift;ARCHITECTURE one OF rlshift ISSIGNAL q_temp:BIT_VECTOR(7 DOWNTO 0);BEGINPROCESS(clr,clk,lod,s,dir,dil)BEGINIF clr='0' THEN q_temp <= "00000000";ELSIF clk'EVENT AND clk='1' THEN IF (lod='1') THENq_temp <= d;ELSIF (S='1') THENFOR i IN 7 downto 1 LOOP --实现右移操作q_temp(i-1) <= q(i);END LOOP ;q_temp(7) <= dir;ELSEFOR 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 one;21.八位左向移位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY lshift ISPORT(clr,lod,clk, dir,dil:IN BIT;d:IN BIT_VECTOR(7 DOWNTO 0);q:BUFFER BIT_VECTOR(7 DOWNTO 0)); END lshift;ARCHITECTURE one OF lshift ISSIGNAL q_temp:BIT_VECTOR(7 DOWNTO 0);BEGINPROCESS(clr,clk,lod ,dir,dil)BEGINIF clr='0' THEN q_temp <= "00000000";ELSIF clk'EVENT AND clk='1' THENIF (lod='1') THENq_temp <= d;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 one;22.八位右向移位寄存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY rshift ISPORT(clr,lod,clk,dir,dil:IN BIT;d:IN BIT_VECTOR(7 DOWNTO 0);q:BUFFER BIT_VECTOR(7 DOWNTO 0)); END rshift;ARCHITECTURE one OF rshift ISSIGNAL q_temp:BIT_VECTOR(7 DOWNTO 0);BEGINPROCESS(clr,clk,lod,dir,dil)BEGINIF clr='0' THEN q_temp <= "00000000";ELSIF clk'EVENT AND clk='1' THENIF (lod='1') THENq_temp <= d;FOR i IN 7 downto 1 LOOP --实现右移操作q_temp(i-1) <= q(i);END LOOP ;q_temp(7) <= dir;END IF;END IF;q <= q_temp;END PROCESS;END one;23.8位二进制加减计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY updowncnt8 ISPORT(clr,clk,ena,load,updown:IN STD_LOGIC;d:IN INTEGER RANGE 0 TO 255;cout:OUT STD_LOGIC;q:BUFFER INTEGER RANGE 0 TO 255); END updowncnt8;ARCHITECTURE one OF updowncnt8 ISBEGINPROCESS(clk,ena,clr,d,load,updown)BEGINIF CLR='0' THEN q <= 0;ELSIF clk'EVENT AND clk='1' THENIF load = '1' THEN q <= d;ELSIF ena='1' THENIF updown = '0' THEN q <= q+1;IF q = 255 THEN COUT <= '1'; END IF;ELSE q <= q-1;IF q = 0 THEN COUT <= '0'; END IF;END IF;END IF;END IF;END PROCESS;END one;24.六进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count6 isport (clr,start,clk: in std_logic;cout: out std_logic;---daout: out std_logic_vector(3 downto 0)daout: buffer integer range 0 to 10);end count6;architecture a of count6 isbeginprocess(clk,clr)beginif clr='0' thendaout<=0;elsif clk'event and clk='1' thenif start='1' thenif daout=5 then daout<=0;cout<='1';elsif daout=0 then daout<=daout+1;cout<='0';else daout<=daout+1;end if;end if;end if;end process;end a;25.十进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count10 isport (clr,start,clk: in std_logic;cout: out std_logic;--daout: out std_logic_vector(3 downto 0));daout: buffer integer range 0 to 10);end count10;architecture a of count10 isbeginprocess(clk,clr)beginif clr='0' thendaout<=0;elsif clk'event and clk='1' thenif start='1' thenif daout=9 then daout<=0;cout<='1';elsif daout=0 then daout<=daout+1;cout<='0';else daout<=daout+1;end if;end if;end if;end process;end a;26.带使能同步清0增1计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter ISPORT (CLK,CLR,EN : IN STD_LOGIC;Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC);END counter;ARCHITECTURE behav OF counter ISBEGINPROCESS(CLK,CLR,EN)V ARIABLE QI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINIF CLK'EVENT AND CLK = '1' THENIF CLR = '1' THEN QI := (OTHERS =>'0');ELSIF EN = '1' THENIF QI < 11 THEN QI := QI + 1;ELSE QI := (OTHERS =>'0');END IF;END IF;END IF;IF QI = 11 THEN COUT <= '1';ELSE COUT <= '0';END IF;Q <= QI;END PROCESS;END behav;27.带使能同步清0增1/减1的3位计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY up_down ISPORT (clk,rst,en,up : IN STD_LOGIC;sum: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);cout : OUT STD_LOGIC);END;ARCHITECTURE a OF up_down ISSignal count:std_logic_vector(2 downto 0);BEGINProcess(clk,rst)beginif rst='0' thencount<=(others=>'0');elsif rising_edge(clk)thenif en='1'thencase up iswhen'1'=>count<=count+1;when others=>count<=count-1;end case;end if;end if;END PROCESS;sum<=count;cout<='1'when en='1'and((up='1'and count=7)or(up='0'and count=0))else'0';end;28.数据比较器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity comp isport(a,b : in std_logic_vector(3 downto 0);sel_f:in std_logic_vector(1 downto 0);q :out boolean);end;architecture a of comp isbeginprocess(sel_f,a,b)begincase sel_f iswhen"00"=>q<=a=b;when"01"=>q<=a<b;when"10"=>q<=a>b;when"11"=>q<=false;end case;end process;end a;。
2选1多路选择器的VHDL描述
XXXXX大学实验报告课程名称:EDA技术试验实验名称:2选1多路选择器的VHDL描述学号:姓名:指导教师评定:______________________ 签名:_____________________________一、实验目的1、学习2选1多路选择器的设计;2、初步了解VHDL表达和设计电路的方法。
二、实验仪器:计算机一台,Quartus 2软件三、实验步骤:1、新建一个文件夹,打开Quartus 2软件,选择FILE->NEW菜单,在弹出的NEW对话框中选择DEVICE DESGIN FILE页的原理图文件编辑器输入项VHDL FILE,按确定键打开VHDL编辑器窗口;2、在VHDL编辑器窗口输入2选1多路选择器的VHDL描述;ENTITY mux21a ISPORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINy<=a WHEN s=’0’ ELSE b;END ARCHITECTURE one;或者:ENTITY mux21a ISPORT(a,b:IN BIT;s:IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINy<=a WHEN s=’0’ ELSE b;END ARCHITECTURE one;3、打开波形编辑器,分别运行2选1多路选择器,观察他们的输出波形:;4、调出VHDL描述产生的2选1多路选择器的原理图.点击TOOLS->NELIST VIEWERS->RTL VIEWERS,即调出VHDL描述产生的2选1多路选择器的RTL电路图,如下所示:四、实验小结经过本次试验初步了解了Quartus 2软件的使用,及VHDL表达和设计电路的方法。
基于cadence的全加器设计报告
当代数字集成电路设计报告题目:CMOS加法器的设计学院:电子工程学院年级:2013级专业:集成电路工程*名:***学号:*******指导教师:**2014 年 1 月 2 日CMOS加法器的设计前言加法器是产生数的和的装置。
加数和被加数为输入,和数与进位为输出的装置为半加器。
若加数、被加数与低位的进位数为输入,而和数与进位为输出则为全加器。
常用作计算机算术逻辑部件,执行逻辑操作、移位与指令调用。
在电子学中,加法器是一种数位电路,其可进行数字的加法计算。
在现代的电脑中,加法器存在于算术逻辑单元(ALU)之中。
加法器可以用来表示各种数值,如:BCD、加三码,主要的加法器是以二进制作运算。
由于负数可用二的补数来表示,所以加减器也就不那么必要。
以单位元的加法器来说,有两种基本的类型:半加器和全加器,半加器有两个输入和两个输出,输入可以标识为A、B 或X、Y,输出通常标识为合S 和进制C。
A 和 B 经XOR 运算后即为S,经AND 运算后即为C。
全加器引入了进制值的输入,以计算较大的数。
为区分全加器的两个进制线,在输入端的记作Ci 或Cin,在输出端的则记作Co 或Cout。
半加器简写为H.A.,全加器简写为 F.A.。
半加器:半加器的电路图半加器有两个二进制的输入,其将输入的值相加,并输出结果到和(Sum)和进制(Carry)。
半加器虽能产生进制值,但半加器本身并不能处理进制值。
全加器:全加器三个二进制的输入,其中一个是进制值的输入,所以全加器可以处理进制值。
全加器可以用两个半加器组合而成。
一、设计要求本次设计要求实现一个加法器,通过从前端到后端的设计过程,了解数字集成电路设计流程,基本单元选用复杂cmos电路实现的一位全加器,采用pmos 与nmos网络完全对偶的mirror型。
图1位加法器级联图如图1所示,四个1位加法器级联成一个4位加法器的级联图。
这种电路的好处是将每前一级的Cin与后一级的Cout直接级联,连接比较方便,电路比较好设计。