eda实验5答案-触发器的vhdl描述
- 格式:doc
- 大小:56.50 KB
- 文档页数:5
eda技术与vhdl设计答案eda技术与vhdl设计答案【篇一:eda技术与vhdl复习练习题】/p> 一、填空题1、pld的中文含义是:________。
2、asic的中文含义是:________。
3、“与-或”结构的可编程逻辑器件主要由四部分构成:________、________、____________和____________。
4、可编程逻辑器件结构图中一般用“x”表示此编程单元为________。
6、可编程逻辑器件结构图中无任何标记表示此编程单元为________。
7、可编程逻辑器件按规模的大小一般分为________和_________。
8、低密度可编程逻辑器件的主要有________和_________。
9、gal器件________取代全部pal器件。
10、pal器件只能________次编程。
11、gal器件能________次编程。
12、gal器件________取代ttl器件。
13、gal器件采用________擦除。
14、pal和gal器件________在系统编程。
15、pal和gal器件需要使用________编程。
二、选择题1、可编程逻辑器件pld的基本结构形式是_______:a:与——与b:与——或c:或——与d:或——或2、可以多次编程的器件是_______:a:prom b:plac:pal d:gal3、pld器件未编程时_______:a:有逻辑功能 b:没有逻辑功能c:pal器件有逻辑功能d:gal 器件有逻辑功能 4、gal器件可以用擦除:a:普通光 b:紫外线c:红外线 d:电5、gal16v8器件的输出引脚最多有______:a:16b:4 c:8 d:206、pal16v8器件的输入引脚最多有_______:a:16 b:4 c:8 d:207、gal16v8不能取代_________:a:pal16v b:74ls138c:74ls373 d:isplsi1032e-70plcc848、gal16v8的_______不可编程:a:与阵列b:或阵列c:输出逻辑宏单元olmc d:a、b都三、判断题1、gal器件的输出逻辑宏单元olmc不能实现pal器件的所有输出形式。
第一章1-1 EDA技术与ASIC设计和FPGA开发有什么关系? P3~4答:利用EDA技术进行电子系统设计的最后目标是完成专用集成电路ASIC的设计和实现;FPGA和CPLD是实现这一途径的主流器件。
FPGA和CPLD通常也被称为可编程专用IC,或可编程ASIC。
FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SoC(片上系统)和ASIC设计,以及对自动设计与自动实现最典型的诠释。
1-2与软件描述语言相比,VHDL有什么特点? P6答:编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU而不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为其特定的硬件电路结构所利用。
综合器将VHDL 程序转化的目标是底层的电路结构网表文件,这种满足VHDL设计程序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独立性。
综合器在将VHDL(硬件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动性和创造性,它不是机械的一一对应式的“翻译”,而是根据设计库、工艺库以及预先设置的各类约束条件,选择最优的方式完成电路结构的设计。
l-3什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么? P5什么是综合? 答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
有哪些类型? 答:(1)从自然语言转换到VHDL语言算法表示,即自然语言综合。
(2)从算法表示转换到寄存器传输级(RegisterTransport Level,RTL),即从行为域到结构域的综合,即行为综合。
(3)从RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合。
(4)从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。
综合在电子设计自动化中的地位是什么? 答:是核心地位(见图1-3)。
填空题1、从执行顺序上划分,VHDL语言可以分为顺序描述语句(Sequential Statements)和并行描述语句(Concurrent Statements)两大类,前者在执行过程中是按照书写顺序依次执行的,而后者则是在同一时间同步执行的,2、顺序描述语句是相对于并行语句而言的,其只出现在进程或者子程序中。
3、标识符赋值目标是以简单的标识符作为被赋值的信号或变量名4、流程控制语句又称为转向控制语句,其特点是通过条件控制开关,决定是否执行或者重复执行或者跳过一条或几条语句。
5、VHDL语言的IF语句是选择分支语句。
6、CASE语句根据满足的条件直接选择多项顺序描述语句中的一项执行,可以用来描述总线或编码、译码的行为。
7、LOOP语句是循环语句的一种,可以使所包含的一组顺序描述语句被循环执行,其执行次数由设定的循环参数决定。
8、由于进程的执行是由敏感信号列表来触发的,因此VHDL语言规定在已列出敏感表的进程中不能使用任何形式的WAIT语句。
9、REPORT语句用于程序运行过程中向用编程人员报告程序的运行状态。
10、REPORT语句提供了4级出错等级,包括FAILURE(失败)、ERROR(错误)、WARNING(警告)、NOTE(注意)。
综述题1、简述赋值语句和代入语句的主要区别。
答案:●对于变量的赋值是立即发生的(假设进程已启动),是一种时间延迟为零的赋值行为。
●对于信号的赋值并不是立即发生的,它发生在一个进程结束时。
●当在同一进程中,同一信号目标有多个赋值源时,信号赋值对象只能被最后一个赋值源赋值,前面的任何赋值都不会改变赋值对象的值。
2、VHDL语言的流程控制语句包括哪几种?答案:●IF语句。
•2 •●CASE语句。
●LOOP语句。
●NEXT语句。
●EXIT语句。
3、使用CASE语句的时候有那些注意事项?答案:●条件句中的选择值必在表达式的取值范围内。
●除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用关键字OTHERS表示,它代表已给的所有条件句中未能列出的其它可能的取值。
第一章1-1 EDA 技术与 ASIC 设计和 FPGA 开发有什么关系答:利用 EDA 技术进行电子系统设计的最后目标是完成专用集成电路 ASIC 的设计和实现;FPGA 和 CPLD 是实现这一途径的主流器件。
FPGA 和 CPLD 通常也被称为可编程专用 IC,或可编程 ASIC。
FPGA 和 CPLD 的应用是 EDA 技术有机融合软硬件电子设计技术、SoC(片上系统)和 ASIC 设计,以及对自动设计与自动实现最典型的诠释。
1-2 与软件描述语言相比,VHDL 有什么特点 P6答:编译器将软件程序翻译成基于某种特定 CPU 的机器代码,这种代码仅限于这种 CPU 而不能移植,并且机器代码不代表硬件结构,更不能改变 CPU 的硬件结构,只能被动地为其特定的硬件电路结构所利用。
综合器将 VHDL程序转化的目标是底层的电路结构网表文件,这种满足 VHDL 设计程序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独立性。
综合器在将 VHDL(硬件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动性和创造性,它不是机械的一一对应式的“翻译”,而是根据设计库、工艺库以及预先设置的各类约束条件,选择最优的方式完成电路结构的设计。
l-3 什么是综合有哪些类型综合在电子设计自动化中的地位是什么什么是综合答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
有哪些类型答:(1)从自然语言转换到 VHDL 语言算法表示,即自然语言综合。
(2)从算法表示转换到寄存器传输级(RegisterTransport Level,RTL),即从行为域到结构域的综合,即行为综合。
(3)从 RTL 级表示转换到逻辑门(包括触发器)的表示,即逻辑综合。
(4)从逻辑门表示转换到版图表示(ASIC 设计),或转换到 FPGA 的配置网表文件,可称为版图综合或结构综合。
EDA实验报告触发器及应用及移位寄存器EDA实验报告实验目的:1.触发器的工作原理。
2.基本时序电路的VHDL代码编写。
3.按键消抖电路应用。
4.定制LPM原件。
5.VHDL语言中元件例化的使用。
6.移位寄存器的工作原理及应用。
实验要求:1.运用LPM原件定制DFF触发器,并调用LPM 定制的DFF触发器,用VHDL语言的元件例化实现消抖电路并了解其工作原理。
2. 移位寄存器是用来寄存二进制数字信息且能进行信息移位的时序逻辑电路。
根据移位寄存器存取信息的方式不同可分为串入串出、串入并出、并入串出、并入并出4种形式,并通过数码管显示出来。
实验原理:1.消抖电路由于一般的脉冲按键与电平按键采用机械开关结构,其核心部件为弹性金属簧片。
按键信号在开关拨片与触点接触后经多次弹跳才会稳定。
本实验采用消抖电路消除抖动以获得一个稳定的电平信号。
2.移位寄存器移位寄存器具有左移、右移、并行输入数据、保持及异步清零5种功能。
其中A、B、C、DQQQQCABD为并行输入端,、、、为并行输出端;SRSI为右移串行输入端,SLSI 为左移串行输入端;S1、S0为模式控制端;CLRN为异步清零端;CLK为时钟脉冲输入端。
实验具体步骤:1.消抖电路(1).用lpm定制DFF<1>.设置lpm_ff选择Installed Plug-Ins?Storage?lpm_ff项;<2>.设置输入data为1位,clock为时钟信号,类型为D型;<3>.添加异步清零和异步置1;其VHDL语言为:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENTITY mydff ISPORT(clock : IN STD_LOGIC ;data : IN STD_LOGIC ;q : OUT STD_LOGIC);END mydff;ARCHITECTURE SYN OF mydff ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (0 DOWNTO 0);SIGNAL sub_wire1 : STD_LOGIC ;SIGNAL sub_wire2 : STD_LOGIC ;SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); COMPONENT lpm_ffGENERIC (lpm_fftype : STRING;lpm_type : STRING;lpm_width : NATURAL);PORT (clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (0 DOWNTO 0);data : IN STD_LOGIC_VECTOR (0 DOWNTO 0));END COMPONENT;BEGINsub_wire1 <= sub_wire0(0);q <= sub_wire1;sub_wire2 <= data;sub_wire3(0) <= sub_wire2;lpm_ff_component : lpm_ffGENERIC MAP (lpm_fftype => "DFF",lpm_type => "LPM_FF",lpm_width => 1)PORT MAP (clock => clock,data => sub_wire3,q => sub_wire0);END SYN;(2).VHDL结构式描述顶层--Top level entity xiaodou library ieee; use ieee.std_logic_1164.all;entity xiaodou isport( d_in,clk:in std_logic;clk_out:out std_logic); end xiaodou; architecture xiaodou_arch of xiaodou is component mydff is --元件例化PORT(clock : IN STD_LOGIC ;data : IN STD_LOGIC ;q : OUT STD_LOGIC);END component;signal x,y:std_logic;begindff1:mydff port map(clock=>clk,data=>d_in,q=>x);dff2:mydff port map(clk,x,y); clk_out<=x and (not y); endxiaodou_arch;(3).功能仿真波形:2.移位寄存器(1).74194功能验证电路(2).74194功能仿真结果仿真分析:clrn=1,clk上升时,s为11,移位寄存器并行置数,此时abcd=1010,q_abcd=1010; clrn=0,移位寄存器进行清零,此时有q_abcd=0000;clrn=1,clk上升时,s为01,sl_sr为01,移位寄存器串行右移补1,输出q_abcd=1000; clrn=1,clk上升时,s为01,sl_sr为10,移位寄存器串行右移补0,输出q_abcd=0100; clrn=1,clk上升时,s为10,sl_sr为10,移位寄存器串行左移补1,输出q_abcd=1001; clrn=1,clk上升时,s为10,sl_sr为01,移位寄存器串行左移补0,输出q_abcd=0010。
实验名称:时序逻辑VHDL设计---触发器一、同步清零(低电平有效)和异步置数(高电平有效)的D触发器的VHDL设计1.实体框图Dclk Reset set QD_FFinst2.程序设计①编译前的程序library ieee;use ieee.std_logic_1164.all;Entity D_FF isport(D,clk,Reset,set:in std_logic;Q:out std_logic);End Entity D_FF;Architecture one of D_FF issignal Q1:std_logic;Beginprocess(clk,Reset,set)Beginif set='1' thenQ1<='1';Elseif clk'event and clk='1' thenif Reset='0' thenQ1<='0';elseQ1<=D;end if;end if;end process;Q<=Q1;End architecture one;②程序编译错误情况错误1:Error (10500): VHDL syntax error at D_FF.vhd(22) near text "process"; expecting "if"错误2:Error (10500): VHDL syntax error at D_FF.vhd(24) near text "architecture"; expecting "if"分析:经检查,发现原程序少了END if,没有与if匹配,添加即可。
③正确的程序library ieee;use ieee.std_logic_1164.all;Entity D_FF isport(D,clk,Reset,set:in std_logic;Q:out std_logic);End Entity D_FF;Architecture one of D_FF issignal Q1:std_logic;Beginprocess(clk,Reset,set)Beginif set='1' thenQ1<='1';Elseif clk'event and clk='1' thenif Reset='0' thenQ1<='0';elseQ1<=D;end if;end if;end if;end process;Q<=Q1;End architecture one;3.仿真波形图4.仿真波形分析当置数端SET出现高电平时,此时不管CP脉冲和D的状态如何,输出立即置为‘1’,实现异步置数的功能;当清零端RESET出现低电平时,而且必须当CP脉冲为上升沿时,输出清零,实现同步清零;除此之外,当CP脉冲为上升沿状态时,D=0,Q=0;D=1,Q=1;二、异步清零(高电平有效)和同步置数(低电平有效)的JK触发器的VHDL设计1.实体框图clk reset setJK[0..1]QJK_FFinst2.程序设计①编译前的程序Library ieee;use ieee.std_logic_1164.all;Entity JK_FF isport( clk,reset,set,J,K:in std_logic;Q:out std_logic);End entity JK_FF;Architecture two of JK_FF issignal Q1:std_logic;beginprocess(clk,reset,set,J,K)beginif reset='1' thenQ1<='0';elseif clk'event and clk='1' thenif set='0' thenQ1<='1';elsecase JK iswhen "00" => Q1<=Q1;when "10" => Q1<='1';when "11" => Q1<=not Q1;when others =>NULL;end case;end if;end if;end if;end process;Q<=Q1;end architecture two;②程序编译错误情况错误1:Error (10482): VHDL error at JK-FF.vhd(19): object "JK" is used but not declared错误2:Error (10523): Ignored construct two at JK-FF.vhd(7) due to previous errors分析:JK为两位,需要定义如下:JK:in std_logic_vector(0 to 1);③正确的程序Library ieee;use ieee.std_logic_1164.all;Entity JK_FF isport( clk,reset,set:in std_logic;JK:in std_logic_vector(0 to 1);Q:out std_logic);End entity JK_FF;Architecture two of JK_FF issignal Q1:std_logic;beginprocess(clk,reset,set,JK)beginif reset='1' thenQ1<='0';elseif clk'event and clk='1' thenif set='0' thenQ1<='1';elsecase JK iswhen "00" => Q1<=Q1;when "01" => Q1<='0';when "10" => Q1<='1';when "11" => Q1<=not Q1;end case;end if;end if;end if;end process;Q<=Q1;end architecture two;3.仿真波形图4.仿真波形分析当清零端ResET出现高电平时,此时不管CP脉冲和JK的状态如何,输出立即清零,实现异步清零的功能;当置数端SET出现低电平时,而且必须当CP脉冲为上升沿时,输出立即置数‘1‘,实现同步置数的功能;除此之外,当CP脉冲为上升沿状态时,J=K=0,Q保持;J=0,K=1,Q置零;J=1,K=0,Q置1;J=K=1,Q翻转一、8位锁存器的VHDL设计1.实体框图D[0..7] clk Q[0..7]latch8a2.程序设计①编译前的程序Library ieee;use ieee.std_logic_1164.all;Entity latch8a isport(D:in std_logic_vector(7 to 0);clk:in std_logic;Q:out std_logic_vector(7 to 0));End latch8a;Architecture three of latch8a issignal q1:std_logic_vector(7 to 0);beginprocess (clk,D)beginif clk'event and clk='1' thenQ1<=D;end if;end process;Q<=Q1;End architecture three;②程序编译错误情况错误:无③正确的程序Library ieee;use ieee.std_logic_1164.all;Entity latch8a isport(D:in std_logic_vector(0 to 7);clk:in std_logic;Q:out std_logic_vector(0 to 7));End latch8a;Architecture three of latch8a issignal q1:std_logic_vector(0 to 7);beginprocess (clk,D)beginif clk'event and clk='1' thenend if;end process;Q<=Q1;End architecture three;3.仿真波形图4.仿真波形分析当CLK脉冲为高电平时,输出为与其相对应的输出。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY12 ISPORT ( CLK ,DA TAIN,RESET : IN STD_LOGIC;Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0));END MEALY12;ARCHITECTURE behav OF MEALY12 ISTYPE states IS (st0, st1, st2, st3,st4);SIGNAL STX : states ;BEGINCOMREG : PROCESS(CLK,RESET) BEGIN--决定转换状态的进程IF RESET ='1' THEN STX <= ST0;ELSIF CLK'EVENT AND CLK = '1' THEN CASE STX ISWHEN st0 => IF DA TAIN = '1' THEN STX <= st1;Q <= "10000" ;else Q<="01010" ;END IF;WHEN st1 => IF DA TAIN = '0' THEN STX <= st2;Q <= "10111" ;else Q<="10100" ; END IF;WHEN st2 => IF DA TAIN = '1' THEN STX <= st3; Q <= "10101" ;else Q<="10011" ;END IF;WHEN st3=> IF DA TAIN = '0' THEN STX <= st4; Q <= "11011" ;else Q<="01001" ;END IF;WHEN st4=> IF DA TAIN = '1' THEN STX <= st0; Q <= "11101" ;else Q<="01101" ;END IF;WHEN OTHERS => STX <= st0; Q<="00000" ;END CASE ;END IF;END PROCESS COMREG ;END behav;(例5-5,双进程时序图)(单进程时序图)要求一:表达的是moore型状态机,特点是输出仅为当前状态的函数。
1.8.1填空1.EDA的英文全称是Electronic Design Automation2.EDA技术经历了计算机辅助设计CAD阶段、计算机辅助工程设计CAE阶段、现代电子系统设计自动化EDA阶段三个发展阶段3. EDA技术的应用可概括为PCB设计、ASIC设计、CPLD/FPGA设计三个方向4.目前比较流行的主流厂家的EDA软件有Quartus II、ISE、ModelSim、ispLEVER5.常用的设计输入方式有原理图输入、文本输入、状态机输入6.常用的硬件描述语言有VHDL、Verilog7.逻辑综合后生成的网表文件为EDIF8.布局布线主要完成将综合器生成的网表文件转换成所需的下载文件9.时序仿真较功能仿真多考虑了器件的物理模型参数10.常用的第三方EDA工具软件有Synplify/Synplify Pro、Leonardo Spectrum1.8.2选择1.EDA技术发展历程的正确描述为(A)A CAD->CAE->EDAB EDA->CAD->CAEC EDA->CAE->CADD CAE->CAD->EDA2.Altera的第四代EDA集成开发环境为(C)A ModelsimB MUX+Plus IIC Quartus IID ISE3.下列EDA工具中,支持状态图输入方式的是(B)A Quartus IIB ISEC ispDesignEXPERTD Syplify Pro4.下列几种仿真中考虑了物理模型参数的仿真是(A)A 时序仿真B 功能仿真C 行为仿真D 逻辑仿真5.下列描述EDA工程设计流程正确的是(C)A输入->综合->布线->下载->仿真B布线->仿真->下载->输入->综合C输入->综合->布线->仿真->下载D输入->仿真->综合->布线->下载6.下列编程语言中不属于硬件描述语言的是(D)A VHDLB VerilogC ABELD PHP1.8.3问答1.结合本章学习的知识,简述什么是EDA技术?谈谈自己对EDA技术的认识?答:EDA(Electronic Design Automation)工程是现代电子信息工程领域中一门发展迅速的新技术。
第三章3-3 设计一个求补码的程序,输入数据是一个有符号的8位二进制(原码)数。
--解:设计一个求补码的程序,输入数据是一个有符号的8位二进制数。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY org_patch ISPORT( org_data : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--原码输入patch_data : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--补码输出END org_patch;ARCHITECTURE BHV OF org_patch ISBEGINPROCESS(org_data)BEGINIF(org_data(7)='0') THENpatch_data<=org_data; --org_data>=0,补码=原码。
elsepatch_data<=org_data(7)&(not org_data(6 DOWNTO 0))+1;--org_data<0,补码=|原码|取反+1。
END IF;END PROCESS;END BHV;3-53-6在VHDL 设计中,给时序电路清零(复位)有两种力方法,它们是什么?解:设Q 定义成信号,一种方法:Q<=“000…000”;其中“000…000”反映出信号Q 的位宽度。
第二种方法:Q<=(OTHE RS=>…0‟);其中OTHERS=>…0‟不需要给出信号Q 的位宽度,即可对Q 清零。
3-8LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DFF1 ISPORT(CLK,D,CLR,SET:IN STD_LOGIC;Q:OUT STD_LOGIC);END DFF1;ARCHITECTURE BHV OF DFF1 ISBEGINPROCESS(CLK,CLR,SET)BEGINIF CLR='1' THEN Q<='1';ELSIF CLK'EVENT AND CLK='1'THEN IF SET='0' THEN Q<='0';ELSE Q<=D;END IF;END IF;END PROCESS;END BHV;第五章5-1给出一个4选1多路选择器的VHDL描述。
library ieee;
use ieee.std_logic_1164.all;
entity try is
port(j,k,clk,rd,sd: in std_logic;
q,nq: buffer std_logic);
end;
architecture behave of try is
begin
process(j,k,clk,rd,sd) variable q_r,nq_r:std_logic; begin
if(clk'event and clk='1' and rd='1' and sd='1')then if(j='0')and(k='1')then
q_r:='0';
nq_r:='1';
elsif (j='1')and(k='0')then
q_r:='1';
nq_r:='0';
elsif(j='1')and(k='1')then
q_r:=not q;
nq_r:=not nq;
end if;
elsif (clk'event and clk='1' and rd='0') then
q_r:='0';
nq_r:='1';
elsif (clk'event and clk='1' and sd='0') then
q_r:='1';
nq_r:='0';
end if;
q<=q_r;
nq<=nq_r;
end process;
end;
sd=’0’
Rd=’0’
Work
library ieee;
use ieee.std_logic_1164.all;
entity dcf is
port(d,clk,rd,sd: in std_logic;
q,nq:out std_logic);
end;
architecture behave of dcf is
begin
process(d,clk,rd,sd) variable q_r,nq_r:std_logic; begin
if(clk'event and clk='1' and rd='1' and sd='1')then if(d='0')then
q_r:='0';
nq_r:='1';
elsif (d='1')then
q_r:='1';
nq_r:='0';
end if;
elsif (clk'event and clk='1' and rd='0') then q_r:='0';
nq_r:='1';
elsif (clk'event and clk='1' and sd='0') then q_r:='1';
nq_r:='0';
end if;
q<=q_r;
nq<=nq_r;
end process;
end;
work
基本rs触发器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY rs IS
PORT( S,R,res :IN std_logic;
Q,NOT_Q:out std_logic);
END;
ARCHITECTURE behav OF rs IS
signal sel1,sel2: std_logic;
BEGIN
process(res,sel1,sel2)
begin
if res='0' then sel1<='0';sel2<='1';
elsif (S='1' and R='0') then sel1<='1';sel2<='0'; elsif (S='0' and R='1') then sel1<='0';sel2<='1'; elsif (S='0' and R='0') then sel1<=sel1; sel2<=sel2; end if;
Q<=sel1;
NOT_Q<=sel2;
end process;
END behav;
基本RS触发器:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY RS_clk IS
PORT( S,R:IN std_logic;
Q,NOT_Q:out std_logic);
END RS_clk;
ARCHITECTURE one OF RS_clk IS
signal sel1,sel2: std_logic;
BEGIN
process(sel1,sel2)
begin
if (S='1' and R='0') then sel1<='1';
sel2<='0';
elsif (S='0' and R='1') then sel1<='0';
sel2<='1';
elsif (S='0' and R='0') then sel1<=sel1;
sel2<=sel2;
end if;
Q<=sel1;
NOT_Q<=sel2;
end process;
END one;
同步RS
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY RS_clk IS
PORT( S,R,clk :IN std_logic;
Q,NOT_Q:out std_logic);
END RS_clk;
ARCHITECTURE one OF RS_clk IS signal sel1,sel2: std_logic;
BEGIN
process(clk,sel1,sel2)
begin
if clk='0' then sel1<='0';
sel2<='1';
elsif (S='1' and R='0') then sel1<='1';
sel2<='0';
elsif (S='0' and R='1') then sel1<='0';
sel2<='1';
elsif (S='0' and R='0') then sel1<=sel1; sel2<=sel2;
end if;
Q<=sel1;
NOT_Q<=sel2;
end process;
END one;。