EDA实验程序汇总
EDA实验程序大集合

用CA SE语句描述4选1多路选择器。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 ISPORT(S1,S2:IN STD_LOGIC;A,B,C,D:IN STD_LOGIC;Z:OUT STD_LOGIC);END ENTITY MUX41;ARCHITECTURE ART OF MUX41 ISSIGNAL S :STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINS<=S1 & S2;PROCESS(S1,S2,A,B,C,D)BEGINCASE S I SWHEN "00"=>Z<=A;WHEN "01"=>Z<=B;WHEN "10"=>Z<=C;WHEN "11"=>Z<=D;WHEN OTHERS =>Z<='X';END CASE;END PROCESS;END ART;END ART1;三八译码器方法1:使用IF语句LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ENCODER ISPORT(IN1:IN STD_LOGIC_VECTOR(7 DOWNTO 0);OUT1:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END ENCODER;ARCHITECTURE ART3 OF ENCODER ISBEGINPROCESS(INT1)BEGINIF IN1(7)=…1‟ THEN OUT1<="111";ELSIF IN1(6)=…1‟ THEN OUT1<="110";ELSIF IN1(5)=…1‟ THEN OUT1<="101";ELSIF IN1(4)=…1‟ THEN OUT1<="100";ELSIF IN1(3)=…1‟ THEN OUT1<="011";ELSIF IN1(2)=…1‟ THEN OUT1<="010";ELSIF IN1(1)=…1‟ THEN OUT1<="001";ELSIF IN1(0)=…1‟ THEN OUT1<="000";ELSE OUT1<="XXX";END IF ;END PROCESS;END ART3;【例4.23】T触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY TCFQ ISPORT(T,CLK:IN STD_LOGIC;Q:BUFFER STD_LOGIC);END TCFQ;ARCHITECTURE ART OF TCFQ ISBEGINPROCESS(CLK)BEGINIF (CLK'EVENT AND CLK=…1‟)THENQ<=NOT(Q);ELSE Q<=Q;END IF;END PROCESS;END ART;比较器ENTITY COMP_BAD ISPORT( a1,b1 : IN BIT;q1 : OUT BIT );END ;ARCHITECTURE one OF COMP_BAD ISBEGINPROCESS (a1,b1)BEGINIF a1 > b1 THEN q1 <= '1' ;ELSIF a1 < b1 THEN q1 <= '0' ;-- 未提及当a1=b1时,q1作何操作END IF;END PROCESS ;END ;【例 4.9】8位数值比较器的VHDL描述LIBRARY IEEE;USE IEEE.STD_LOGIC_VECTOR(7 DOWNTO 0);ENTITY COMPARE ISPORT (A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);EQ:OUT STD_LOGIC);END COMPARE;ARCHITECTURE ART OF COMPARE ISBEGINEQ <=…1‟WHEN A=B ELSE …0‟;END ART;计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT (CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK, RST, EN)V ARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN --检测是否允许计数(同步使能)IF CQI < 9 THEN CQI := CQI + 1; --允许计数, 检测是否小于9ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零END IF;END IF;END IF;IF CQI = 9 THEN COUT <= '1'; --计数大于9,输出进位信号ELSE COUT <= '0';END IF;CQ <= CQI; --将计数值向端口输出END PROCESS;END behav;1. 同步计数器【例 4.32】一个模为60,具有异步复位、同步置数功能的8421BCD码计数器。
EDA-实验报告

实验一五人表决器设计一、实验目的1 加深对电路理论概念的理解3 加深计算机辅助分析及设计的概念4 了解及初步掌握对电路进行计算机辅助分析的过程二、实验要求制作一个五人表决器,共五个输入信号,一个输出信号。
若输入信号高电平数目多于低电平数目,则输出为高,否则为低。
三、实验原理根据设计要求可知,输入信号共有2^5=32种可能,然而输出为高则有15种可能。
对于本设计,只需一个模块就能完成任务,并采用列写真值表是最简单易懂的方法。
四、计算机辅助设计设A,B,C,D,E引脚为输入引脚,F为输出引脚。
则原理图如1所示图1.1 五人表决器原理图实验程序清单如下:MODULE VOTEA,B,C,D,E PIN;F PIN ISTYPE 'COM';TRUTH_TABLE([A,B,C,D,E]->[F])[0,0,1,1,1]->[1];[0,1,1,1,0]->[1];[0,1,0,1,1]->[1];[0,1,1,0,1]->[1];[1,0,1,1,1]->[1];[1,1,0,1,1]->[1];[1,1,1,0,1]->[1];[1,1,1,1,0]->[1];[1,1,1,0,0]->[1];[1,1,0,1,0]->[1];[1,1,1,1,1]->[1];[1,1,0,0,1]->[1];[1,0,0,1,1]->[1];[1,0,1,0,1]->[1];[1,0,1,1,0]->[1];END五、实验测试与仿真根据题目要求,可设输入分别为:0,0,0,0,0;1,1,1,1,1;1,0,1,0,0;0,1,0,1,1。
其测试程序如下所示:MODULE fivevoteA,B,C,D,E,F PIN;X=.X.;TEST_VECTORS([A,B,C,D,E]->[F])[0,0,0,0,0]->[X];[1,1,1,1,1]->[X];[1,0,1,0,0]->[X];[0,1,0,1,1]->[X];END测试仿真结果如图1.2所示:图1.2 五人表决器设计仿真图可知,设计基本符合题目要求。
EDA实验程序总结(全)

EDA实验程序总结3/8译码器library ieee;use ieee.std_logic_1164.all;entity decoder isport ( inp: in std_logic_vector(2 downto 0);outp: out std_logic_vector(7 downto 0)); end decoder;architecture behave of decoder isbeginoutp(0) <= '1' when inp = "000" else '0';outp(1) <= '1' when inp = "001" else '0';outp(2) <= '1' when inp = "010" else '0';outp(3) <= '1' when inp = "011" else '0';outp(4) <= '1' when inp = "100" else '0';outp(5) <= '1' when inp = "101" else '0';outp(6) <= '1' when inp = "110" else '0';outp(7) <= '1' when inp = "111" else '0';end behave;全加器(五种方法)1--布尔代数法library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder_01 isport( ai,bi,ci_1:in bit;si,ci:out bit);end entity adder_01; architecture beheave of adder_01 isbeginsi<=ci_1 xor ( ai xor bi );ci<=(ai and bi) or (ci_1 and ( ai xor bi )) ;end architecture beheave ;2--use when_else sentenceslibrary ieee;use ieee.std_logic_1164.all;entity adder_02 isport( ai,bi,ci_1:in std_logic;si,ci:out std_logic );end entity adder_02;architecture beheave of adder_02 issignal n2:std_logic_vector(1 downto 0);signal n3:std_logic_vector(2 downto 0);beginn3 <= ci_1 & ai & bi;n2<="00" when n3="000" else"10" when n3="001" else"10" when n3="010" else"01" when n3="011" else"10" when n3="100" else"01" when n3="101" else"01" when n3="110" else"11" ;si<=n2(1);ci<=n2(0);end beheave;3--use with_select_when sentences library ieee;use ieee.std_logic_1164.all;entity adder_03 isport( ai,bi,ci_1:in std_logic;si,ci:out std_logic);end entity adder_03 ; architecture dataflow of adder_03 is signal n2:std_logic_vector(1 downto 0); signal n3:std_logic_vector(2 downto 0);beginn3<=ci_1 & ai & bi ;with n3 selectn2<="00" when "000","10" when "001","10" when "010","01" when "011","10" when "100","01" when "101","01" when "110","11" when others;si<=n2(1);ci<=n2(0);end dataflow;4--use if_elsif_else sentencelibrary ieee;use ieee.std_logic_1164.all;entity adder_04 isport ( ai,bi,ci_1:in std_logic ;si,ci:out std_logic ) ;end entity adder_04 ; architecture beheave of adder_04 issignal n3:std_logic_vector(2 downto 0); signal n2:std_logic_vector(1 downto 0); beginn3<= ci_1 & ai & bi ;process ( n3 )beginif n3="000" then n2<="00";elsif n3="001" then n2<="10";elsif n3="010" then n2<="10";elsif n3="011" then n2<="01";elsif n3="100" then n2<="10";elsif n3="101" then n2<="01";elsif n3="110" then n2<="01";else n2<="11";end if;si<=n2(1);ci<=n2(0);end process;end beheave;5--use case_when sentence library ieee;use ieee.std_logic_1164.all;entity adder_05 isport ( ai,bi,ci_1:in std_logic ;si,ci:out std_logic);end entity adder_05; architecture beheave of adder_05 is signal n3:std_logic_vector(2 downto 0); signal n2:std_logic_vector(1 downto 0); beginn3<=ci_1 & ai & bi;process ( n3 )begincase n3 iswhen "000" => n2<="00";when "001" => n2<="10";when "010" => n2<="10";when "011" => n2<="01";when "100" => n2<="10";when "101" => n2<="01";when "110" => n2<="01";when others => n2<="11";end case ;si<=n2(1);ci<=n2(0);end process;end beheave;D触发器分频:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isgeneric(n:integer:=10000000);port(clk:in std_logic ;clock: buffer std_logic);end fenpin;architecture behave of fenpin isbeginprocess(clk)variable num:integer range 0 to 50000000; beginif clk'event and clk='1' thenif num=n thennum:=0;clock<=not clock;else num:=num+1;end if;end if;end process;end behave;D触发器:library ieee;use ieee.std_logic_1164.all;entity dff1 isport (d,clk :in std_logic;q:out std_logic);end dff1;architecture behave of dff1 issignal q1:std_logic;beginprocess (clk,q1)beginif clk'event and clk='1'thenq1<=d;end if ;end process;q<=q1;end behave;顶层文件:library ieee;use ieee.std_logic_1164.all;entity Df isport (dd,clck :in std_logic;qq:out std_logic);end Df;architecture behave of Df is component fenpin is--分频器generic(n:integer:=10000000);port(clk:in std_logic ;clock: out std_logic);end component;component dff1 is--D触发器port (d,clk :in std_logic;q:out std_logic);end component;signal a:std_logic;beginu1:fenpin generic map(n=>10000000) port map(clk=>clck,clock=>a);u2:dff1 port map(d=>dd,clk=>a,q=>qq); end behave;JK触发器:分频:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isgeneric(n:integer:=10000000);port(clk:in std_logic ;clock: buffer std_logic);end fenpin;architecture behave of fenpin isbeginprocess(clk)variable num:integer range 0 to 50000000; beginif clk'event and clk='1' thenif num=n thennum:=0;clock<=not clock;else num:=num+1;end if;end if;end process;end behave;J触发器:library ieee;use ieee.std_logic_1164.all;entity jkff1 isport (sd,rd,clk,j,k:in std_logic;q,qb:out std_logic);end entity;architecture behave of jkff1 issignal q1,qb1:std_logic;beginprocess(sd,rd,clk,q1,qb1)beginif (sd='0' and rd='1') thenq1<='1';qb1<='0';elsif (sd='1' and rd='0') thenq1<='0';qb1<='1';elsif (sd='1' and rd='1' and rising_edge(clk)) thenq1<=(j and (not q1)) or ((not k)and q1);qb1<=not q1;end if;q<=q1; qb<=qb1;end process;end behave;顶层文件:library ieee;use ieee.std_logic_1164.all;entity JK isport (sd1,rd1,clk1,j1,k1:in std_logic;q1,qb1:out std_logic);end entity;architecture behave of JK iscomponent fenpin is--分频器generic(n:integer:=10000000);port(clk:in std_logic ;clock: out std_logic);end component;component jkff1 isport (sd,rd,clk,j,k:in std_logic;q,qb:out std_logic);end component;signal q0:std_logic;signal a:std_logic;begina<=clk1;u1:fenpin generic map(n=>10000000)port map(clk=>a,clock=>q0);u2:jkff1 port map(sd=>sd1,rd=>rd1,j=>j1,k=>k1,q=>q1,qb=>qb1,clk=>q0); end behave;十进制:分频:library ieee;use ieee.std_logic_1164.all;entity fenpin isport(clk:in std_logic;qout:buffer std_logic);end;architecture behave of fenpin isbeginprocess(clk)variable num: integer :=1;beginif falling_edge(clk)then if num=10000000then num:=1;qout<=not qout;else num:=num+1;end if;end if;end process;end behave;十进制:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sjz isport(CLR,LD,CLK:in std_logic;EN:in std_logic_vector(1 downto 0);D:in std_logic_vector(3 downto 0);Q:out std_logic_vector(3 downto 0);C:out std_logic);end sjz;architecture ls of sjz issignal Q1:std_logic_vector(3 downto 0);signal EN1:std_logic;beginEN1<=EN(1)AND EN(0);process(CLR,LD,CLK,EN)beginif CLR='0' then Q1<="0000";C<='0';elsif CLK'event and CLK='1' thenif LD='0' then q1<=D;C<='0';elsif EN1='1' thenif Q1="1001" then Q1<="0000";C<='1';else Q1<=Q1+1;end if;end if;end if;end process;Q<=Q1;end ls;顶层文件:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity shijingzhi isport(CLR,LD,CLK:in std_logic;EN:in std_logic_vector(1 downto 0);D:in std_logic_vector(3 downto 0);Q:out std_logic_vector(3 downto 0);C:out std_logic);end entity shijingzhi;architecture ls of shijingzhi iscomponent sjzport(CLR,LD,CLK:in std_logic;EN:in std_logic_vector(1 downto 0);D:in std_logic_vector(3 downto 0);Q:out std_logic_vector(3 downto 0);C:out std_logic);end component;component fenpinport(clk:in std_logic;qout:buffer std_logic);end component;signal clk1:std_logic;beginu1:sjz port map(CLK=>clk1,LD=>LD,CLR=>CLR,EN=>EN,D=>D,Q=>Q,C=>C); u2:fenpin port map(CLK=>clk,qout=>clk1);end ls;扫描显示电路:分频:library ieee;use ieee.std_logic_1164.all;entity fenpin isport(clk:in std_logic;qout:buffer std_logic);end;architecture behave of fenpin isbeginprocess(clk)variable num: integer :=1;beginif falling_edge(clk)then if num=4000then num:=1;qout<=not qout;else num:=num+1;end if;end if;end process;end behave;七段译码:library ieee;use ieee.std_logic_1164.all;entity qiduan isport(din:in std_logic_vector(3 downto 0);led7:out std_logic_vector(6 downto 0) );end ;architecture behave of qiduan isbeginprocess(din)begincase din iswhen "0000" => led7<="0111111";when "0001" => led7<="0000110";when "0010" => led7<="1011011";when "0011" => led7<="1001111";when "0100" => led7<="1100110";when "0101" => led7<="1101101";when "0110" => led7<="1111101";when "0111" => led7<="0000111";when "1000" => led7<="1111111";when "1001" => led7<="1101111";when "1010" => led7<="1110111";when "1011" => led7<="1111100";when "1100" => led7<="0111001";when "1101" => led7<="1011110";when "1110" => led7<="1111001";when "1111" => led7<="1110001";when others => null;end case;end process;end behave;计数器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter8 isport(clk: in std_logic;count: out std_logic_vector(2 downto 0);sel: out std_logic_vector(3 downto 0)); end counter8;architecture behave of counter8 isbeginprocess(clk)variable cnt: integer :=0;beginif rising_edge(clk)thenif cnt=7then cnt:=0;else cnt:=cnt+1;end if;end if;case cnt iswhen 0 => count<="111";sel<="0001";when 1 => count<="110";sel<="0010";when 2 => count<="101";sel<="0011";when 3 => count<="100";sel<="0100";when 4 => count<="011";sel<="0101";when 5 => count<="010";sel<="0110";when 6 => count<="001";sel<="0111";when 7 => count<="000";sel<="1000";when others => null;end case;end process;end behave;顶层文件:library ieee;use ieee.std_logic_1164.all;entity shumaguan isport(clk:in std_logic;duan:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end ;architecture behave of shumaguan iscomponent qiduanport(din:in std_logic_vector(3 downto 0);led7:out std_logic_vector(6 downto 0) );end component;component counter8port(clk: in std_logic;count: out std_logic_vector(2 downto 0);sel: out std_logic_vector(3 downto 0));end component;component fenpinport(clk:in std_logic;qout:buffer std_logic);end component;signal duan1:std_logic_vector(3 downto 0);signal clks:std_logic;beginu1: qiduan port map(led7=>duan,din=>duan1);u2: counter8 port map(count=>wei,sel=>duan1,clk=>clks);u3: fenpin port map(clk=>clk,qout=>clks);end behave;交通灯:计数器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity counter8 isport(clk:in std_logic;counter:out std_logic_vector(2 downto 0));end entity counter8;architecture bhv of counter8 issignal counter1:std_logic_vector(2 downto 0); beginprocess (clk)beginif clk'event and clk='1' thenif counter1="001" then counter1<="000";else counter1<=counter1 +1;end if;end if;end process;counter<=counter1;end architecture bhv;七段译码器:library ieee;use ieee.std_logic_1164.all;entity seg7 isport(din:in std_logic_vector(3 downto 0);led7:out std_logic_vector(6 downto 0) );end seg7;architecture behave of seg7 isbeginprocess(din)begincase din iswhen "0000" => led7<="0111111";when "0001" => led7<="0000110";when "0010" => led7<="1011011";when "0011" => led7<="1001111";when "0100" => led7<="1100110";when "0101" => led7<="1101101";when "0110" => led7<="1111101";when "0111" => led7<="0000111";when "1000" => led7<="1111111";when "1001" => led7<="1101111";when "1010" => led7<="1110111";when "1011" => led7<="1111100";when "1100" => led7<="0111001";when "1101" => led7<="1011110";when "1110" => led7<="1111001";when "1111" => led7<="1110001";when others => null;end case;end process;end behave;分频library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin isgeneric(N:integer:=50000);port(clk:in std_logic;q:buffer std_logic);end entity fenpin;architecture bhv of fenpin isbeginprocess (clk)variable a1:integer:=N-1 ;beginif rising_edge(clk) thenif a1=N-1 then a1 :=0;q<=not q;else a1 :=a1+1;end if;end if;end process;end architecture bhv;顶层文件:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;--实体的说明entity jiaotongdeng isport (clk:in std_logic;--内部信号的输入rst:in std_logic;--复位--数码的输入segout:out std_logic_vector(6 downto 0);--七段译码器的输出counter:buffer std_logic_vector(2 downto 0); --8进制计数器的输出q:out std_logic_vector(11 downto 0));end;--结构体说明architecture bhv of jiaotongdeng iscomponent fenpin --分频generic(N:integer);port(clk:in std_logic;q:buffer std_logic);end component ;component seg7 -- 七段译码器port(din:in std_logic_vector(3 downto 0);led7:out std_logic_vector(6 downto 0));end component ;component counter8 --8进制port(clk:in std_logic;counter:out std_logic_vector(2 downto 0));end component ;--中间信号signal bcdin:std_logic_vector(3 downto 0);signal number1: std_logic_vector(3 downto 0);signal number2: std_logic_vector(3 downto 0);signal clk1: std_logic;--100HZsignal clk2: std_logic;--1HZtype state_value is( s1,s2,s3,s4);signal state:state_value;begin--各元件的端口连接关系M1 :fenpin generic map(N=>30000) port map(clk,clk1);--100HZM2 :fenpin generic map(N=>10000000) port map(clk,clk2); --1HZM3 :counter8 port map(clk1,counter);G1 :seg7 port map(bcdin,segout);process(rst,clk2)beginif rst='0' then state <= s1; number2<="0010";number1<="0000";q<="100001100001";elsif rising_edge(clk2) thencase state iswhen s1 =>if number2 ="0000" thenif number1 ="0000" then state <= s2; q<="100010100010";number2<="0000";number1<="0011";else number1<=number1-1;end if;elsif number1="0000" then number2<=number2-1;number1<="1001";else number1 <= number1 - 1;end if ;when s2 =>if number1 ="0000" then state <= s3; q<="001100001100";number2<="0010";number1<="0000";else number1<=number1-1;end if ;when s3 =>if number2 ="0000" thenif number1 ="0000" then state <= s4; q<="010*********";number2<="0000";number1<="0011";else number1<=number1-1;end if;elsif number1="0000" then number2<=number2-1;number1<="1001";else number1 <= number1 - 1;end if ;when s4 =>if number1 ="0000" then state <= s1; q<="100001100001";number2<="0010";number1<="0000";else number1<=number1-1;end if ;end case;end if;end process;process(counter)--每一位对应的数值begincase counter iswhen "000"=>bcdin<=number1;when "001"=>bcdin<=number2;when others=>null;end case;end process;end bhv;数字钟:拨码开关:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity boma isport( clk : in std_logic ;kaiguan : in std_logic;q :buffer std_logic);end entity;architecture bhv of boma is type state_value is( s0,s1,s2,s3); signal state:state_value;beginprocess( clk ,state)beginif rising_edge(clk) thencase state iswhen s0 =>if kaiguan = '0' thenstate <= s1;else state <= s0;end if;when s1 =>if kaiguan = '1' thenstate<= s2;else state<= s1;end if;when s2 =>if kaiguan= '1' thenstate<= s3;else state <= s1;end if;when s3 =>if kaiguan = '0' thenstate <= s0;q<=not q;end if;end case;end if;end process;end bhv;分频:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fenpin isgeneric(N:integer:=10000000);port(clk:std_logic;q:buffer std_logic);end fenpin;architecture behave of fenpin isbeginprocess(clk)variable a:integer:=N-1;beginif rising_edge(clk) thenif a=N-1 then a:=0;q<=not q;else a:=a+1;end if;end if;end process;end behave;计数器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity counter8 isport(clk:in std_logic;counter:out std_logic_vector(2 downto 0));end entity counter8;architecture bhv of counter8 issignal counter1:std_logic_vector(2 downto 0); beginprocess (clk)beginif clk'event and clk='1' thenif counter1="101" then counter1<="000";else counter1<=counter1 +1;end if;end if;end process;counter<=counter1;end architecture bhv;七段译码器:library ieee;use ieee.std_logic_1164.all;entity seg7 isport(din:in std_logic_vector(3 downto 0);led7:out std_logic_vector(6 downto 0)); end seg7;architecture behave of seg7 isbeginprocess(din)begincase din iswhen "0000" => led7<="0111111";when "0001" => led7<="0000110";when "0010" => led7<="1011011";when "0011" => led7<="1001111";when "0100" => led7<="1100110";when "0101" => led7<="1101101";when "0110" => led7<="1111101";when "0111" => led7<="0000111";when "1000" => led7<="1111111";when "1001" => led7<="1101111";when "1010" => led7<="1110111";when "1011" => led7<="1111100";when "1100" => led7<="0111001";when "1101" => led7<="1011110";when "1110" => led7<="1111001";when "1111" => led7<="1110001";when others => null;end case;end process;end behave;顶层文件:--库文件的调用library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;--实体的说明entity shuzizhong isport (clk:in std_logic;--内部信号的输入kaiguan1:in std_logic;--拨码开关1,作用启动数码的校准kaiguan2:in std_logic;--拨码开关2,小时校准kaiguan3:in std_logic;--拨码开关3,分校准kaiguan4:in std_logic;--拨码开关4,秒校准c:out std_logic; --蜂鸣器的输入端--数码的输入segout:out std_logic_vector(6 downto 0);--七段译码器的输出counter:buffer std_logic_vector(2 downto 0) --8进制计数器的输出);end shuzizhong;--结构体说明architecture bhv of shuzizhong iscomponent fenpin --分频generic(N:integer);port(clk:in std_logic;q:buffer std_logic);end component ;component seg7 -- 七段译码器port(din:in std_logic_vector(3 downto 0);led7:out std_logic_vector(6 downto 0));end component ;component counter8 --8进制port(clk:in std_logic;counter:out std_logic_vector(2 downto 0));end component ;component boma --拨码port ( clk: in std_logic;kaiguan:in std_logic;q: buffer std_logic);end component ;--中间信号signal bcdin:std_logic_vector(3 downto 0);signal number1: std_logic_vector(3 downto 0);signal number2: std_logic_vector(3 downto 0);signal number3: std_logic_vector(3 downto 0);signal number4: std_logic_vector(3 downto 0);signal number5: std_logic_vector(3 downto 0);signal number6: std_logic_vector(3 downto 0);signal clk1: std_logic;--1000HZsignal clk2: std_logic;--500HZsignal clk3: std_logic;--100HZsignal clk4: std_logic;--1HZsignal a1: std_logic;--拨码开关1产生的相应信号signal a2: std_logic;--拨码开关2产生的相应信号signal a3: std_logic;--拨码开关3产生的相应信号signal a4: std_logic;--拨码开关4产生的相应信号begin--各元件的端口连接关系M1 :fenpin generic map(N=>10000) port map(clk,clk1);--1000HZM2 :fenpin generic map(N=>20000) port map(clk,clk2); --500HZM3 :fenpin generic map(N=>30000) port map(clk,clk3); --100HZM4 :fenpin generic map(N=>10000000) port map(clk,clk4); --1HZM5 :counter8 port map(clk2,counter);B1:boma port map(clk3,kaiguan1,a1);B2:boma port map(clk3,kaiguan2,a2);B3:boma port map(clk3,kaiguan3,a3);B4:boma port map(clk3,kaiguan4,a4);G1 :seg7 port map(bcdin,segout);process(a1,number1,number2,number3,number4) --蜂鸣器的鸣叫beginif a1='0' thenif number4="0101" thenif number3="1001" thenif number2="0101" thenif (number1 and"0001")="0000"then c<=clk2;end if;end if;end if;end if;if(number1="0000" and number2="0000" and number3="0000" andnumber4="0000") then c<=clk1;end if;end if;end process;process(clk4,a1,a2,a3,a4)--数字钟的显示beginif rising_edge(clk4) thenif a1='0' thenif number1="1001" thenif number2="0101" thennumber1<="0000";number2<="0000";number3<=number3+1;if number3="1001" thennumber3<="0000";number4<=number4+1;if number4="0101" thennumber4<="0000"; number3<="0000";number5<=number5+1;if number5="0011" thenif number6="0010" thennumber5<="0000";number6<="0000";end if;elsif number5="1001" thennumber5<="0000";number6<=number6+1;end if;end if;end if;else number1<="0000";number2<=number2+1;end if;else number1<=number1+1;end if;--拨码开关的相应操作elsif a2='1'then --小时的校准if number6= "0010" thenif number5="0011" then number5<="0000";number6<="0000";else number5<=number5+1;end if;elsif number5="1001" thennumber5<="0000";number6<=number6+1;else number5<=number5+1;end if;elsif a3='1' then --分的校准if number4="0101" thenif number3="1001" then number3<="0000" ;number4<="0000" ;else number3<=number3+1;end if;elsif number3="1001" thennumber3<="0000";number4<=number4+1;else number3<=number3+1;end if;elsif a4='1'then --秒的校准number1<="0000";number2<="0000";end if;end if;end process;process(counter)--每一位对应的数值begincase counter iswhen "000"=>bcdin<=number1;when "001"=>bcdin<=number2;when "010"=>bcdin<=number3;when "011"=>bcdin<=number4;when "100"=>bcdin<=number5;when "101"=>bcdin<=number6;when others=>null;end case;end process;end bhv;点阵:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div isport(clk20m :in std_logic;clkn :out std_logic);end div;architecture bhv of div isconstant div_num :integer :=20000 ;signal n1 :std_logic_vector(24 downto 0); beginprocess(clk20m)beginif rising_edge(clk20m) thenif n1=div_num thenn1<=(others=>'0');else n1<=n1+1;end if;if n1<div_num/2 thenclkn<='0';else clkn<='1';end if;end if;end process;end bhv;16进制:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt16 isport(clkn :in std_logic;bcd_out1 :out std_logic_vector(3 downto 0);bcd_out2 :out std_logic_vector(3 downto 0));end cnt16;architecture bhv of cnt16 issignal q_s :std_logic_vector(3 downto 0); beginprocess(clkn)beginif rising_edge(clkn)thenif q_s<15 thenq_s<=q_s+1;else q_s<="0000";end if;end if;end process;bcd_out1<=q_s;bcd_out2<=q_s;end bhv;点阵:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dianzhen isport(bcd_in :in std_logic_vector(3 downto 0);q :out std_logic_vector(15 downto 0));end dianzhen;architecture bhv of dianzhen isbeginprocess(bcd_in)begincase bcd_in iswhen "0000" =>q<="1111111111111111";when "0001" =>q<="1111111111111111";when "0010" =>q<="1111111111111111";when "0011" =>q<="1111111111111111";when "0100" =>q<="1111111111111111";when "0101" =>q<="1111111111111111";。
EDA实验报告

EDA实验报告一、实验目的本实验旨在通过使用EDA(数据探索性分析)技术,进一步了解和分析所研究数据的特征、分布、关系以及可能存在的异常值等,从而为后续的数据建模和决策提供更加准确的依据。
二、实验步骤1. 数据收集与加载从数据源中获取所需数据集,并使用相应的数据加载工具将数据集导入到实验环境中。
多种数据源包括文件、数据库、API请求等方式均可。
2. 数据检查与预处理对导入的数据进行初步检查,包括数据类型、缺失值、异常值等方面的处理。
根据具体需求,对缺失值可以进行填充或删除操作,对异常值可以通过替换、删除或者修复的方式进行处理。
3. 数据探索性分析a) 描述性统计分析对各个变量进行描述性统计,包括计算均值、中位数、标准差等指标,以直观地了解数据的分布和变异程度。
b) 单变量分析对每个变量进行分析和探索,绘制直方图、箱线图、概率密度图等,以帮助我们了解变量的分布情况、异常值等。
c) 多变量分析使用散点图、柱状图、热力图等方式,对不同变量之间的关系进行分析。
可以通过相关性分析、协方差矩阵等方法来探索变量之间的线性关系。
4. 结果可视化在数据分析过程中,可以使用适当的可视化方法将分析结果直观地展示出来,如绘制折线图、散点图、热力图等。
可视化可以更好地理解数据的特征和趋势。
5. 异常检测与处理在探索性分析过程中,发现异常值后,需要进一步分析和决定如何处理它们。
可以采用剔除、修复等方式,使得数据能够更加符合实际情况。
6. 相关性分析对于关键变量之间的相互关系,可以使用相关性分析等统计方法来衡量它们的相关程度。
这可以帮助我们理解变量之间的影响和作用,以及它们与问题或目标变量之间的关系。
三、实验结果通过对所研究数据集的EDA实验,我们得出以下结论:1. 数据集的缺失值情况较为严重,需要进行适当的处理,以避免因缺失数据引起的结果不准确或失真的问题。
2. 变量A和变量B之间存在较强的正相关关系,即当A增加时,B 也会相应地增加;变量C则与变量A和B之间的关系较弱。
eda实验报告最终版

实验一实验二1、24进制加法计数器的程序:LIBRARY Ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count24 ISPORT(en,clk: IN STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);--个位数计数qb: out STD_LOGIC_VECTOR(1 DOWNTO 0));--十位数计数END count24;ARCHITECTURE a1 OF count24 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(1 DOWNTO 0);beginif clk'event and clk='1' thenif en='1' thenif tma="1001" then tma:="0000";tmb:=tmb+1;Elsif tmb="10" and tma="0011" then tma:="0000";tmb:="00";else tma:=tma+1;end if;end if;end if;qa<=tma;qb<=tmb;end process;END a1;2,60进制的加法器的实验程序LIBRARY Ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count60 ISPORT(en,clk: IN STD_LOGIC;qa: out STD_LOGIC_VECTOR(3 DOWNTO 0);--个位数计数qb: out STD_LOGIC_VECTOR(2 DOWNTO 0));--十位数计数END count60;ARCHITECTURE a1 OF count60 ISBEGINprocess(clk)variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb: STD_LOGIC_VECTOR(2 DOWNTO 0);beginif clk'event and clk='1' thenif en='1' thenif tma="1001" and tmb="101"then tmb:="000";tma:="0000" ;Elsif tma="1001" then tma:="0000";tmb:=tmb+1;else tma:=tma+1;end if;end if;end if;qa<=tma;qb<=tmb;end process;END a1;实验三9、采用VHDL语言描述以上3-8译码器LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY s3_8 ISPORT ( A : IN STD_LOGIC_VECTOR(2 DOWNTO 0);D : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ) ;END ;ARCHITECTURE one OF s3_8 ISBEGINPROCESS( A )BEGINCASE A ISWHEN "000" => D <= "00000001" ;WHEN "001" => D <= "00000010" ;WHEN "010" => D <= "00000100" ;WHEN "011" => D <= "00001000" ;WHEN "100" => D <= "00010000" ;WHEN "101" => D <= "00100000" ;WHEN "110" => D <= "01000000" ;WHEN "111" => D <= "10000000" ;WHEN OTHERS => NULL ;END CASE ;END PROCESS ;END ;实验四1、用VHDL语言设计一个四舍五入判别电路,其输入为8421BCD码,要求当输入大于或等于5时,判别电路输出为1,反之为0。
EDA使用的12个流程

EDA使用的12个流程
1. 数据收集
•确定数据来源和收集方式
•对数据进行初步的探索性分析
2. 数据清洗
•处理缺失值、异常值等数据质量问题
•进行数据变换和规范化
3. 数据可视化
•使用图表和可视化工具将数据表现出来
•探索数据的分布和关联性
4. 描述统计分析
•统计数据的基本概述,包括均值、中位数、标准差等•分析变量的分布和特征
5. 探索性数据分析(EDA)
•通过可视化和统计分析来寻找数据中的规律和结构
•发现数据之间的关系和相互影响
6. 双变量分析
•分析两个变量之间的相关性和相互作用
•使用散点图、线性回归等方法进行分析
7. 多变量分析
•分析多个变量之间的关系
•使用热力图、多元回归等方法进行分析
8. 因果分析
•研究变量之间的因果关系
•使用因果图、实验设计等方法进行分析
9. 预测建模
•基于数据特征和模型算法,进行预测和建模
•使用回归、分类、聚类等方法进行分析
10. 模型评估
•对预测模型进行评估,包括准确率、召回率等指标
•使用交叉验证、ROC曲线等方法进行评估
11. 结果解释
•解释模型的结果和预测的意义
•提出结论和建议
12. 报告撰写
•将整个分析过程整理成报告
•包括数据分析的方法、结果和结论
以上是EDA使用的12个流程,通过这些流程可以帮助我们更好地理解和分析数据,发现其中的规律和关联性,并提供数据驱动的决策依据。
采用Markdown 格式进行编写可以使得文档结构清晰,便于阅读和理解。
EDA实验报告(程序)
江西科技师范大学实验报告课程EDA技术与verilog实验系别通信与电子学院班级10电科一班学号20102481姓名刘先明报告规格一、实验目的二、实验原理三、实验仪器四、实验方法及步骤五、实验记录及数据处理误差分析及问题讨论实验一 EDA实验箱使用一.实验目的1.GW48教学实验系统原理与使用介绍2.熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。
二.实验内容首先了解GW48系统使用注意事项以及GW48系统主板结构与使用方法,接着对各实验电路结构图特点与适用范围简述。
最后在QuartusII界面下,用文本输入和图形输入分别验证九选一多路选择器的功能。
三.程序清单文本输入如下所示:module mux91a(a0,a1,a2,a3,a4,a5,a6,a7,a8,out6,sel);input a0,a1,a2,a3,a4,a5,a6,a7,a8;input [3:0] sel;output out6;reg out6;always @ (a0,a1,a2,a3,a4,a5,a6,a7,a8)begincase (sel)0:out6<=a0;1:out6<=a1;2:out6<=a2;3:out6<=a3;4:out6<=a4;5:out6<=a5;6:out6<=a6;7:out6<=a7;8:out6<=a8;default:out6<=0;endcaseendendmodule图形输入如下所示:四.实验步骤1、新建一个名称为MUX91a的工程,并在该文件夹中新建一个MUX91a.v的文件。
2、编译代码,编译成功后进行第三步,若不成功则查改代码中的错误。
3、在工程文件夹中新建一个MUX91a.vwf的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
4、验证输出端口波形是否达到四选一多路选择器的功能。
仿真波形如下图所示。
EDA实验报告
EDA实验报告EDA(VHDL编程)实验报告一、引言EDA (Electronic Design Automation) 是一种用于电子设计和验证的自动化工具。
VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述和建模数字系统。
本实验旨在使用VHDL编程并使用EDA工具进行设计和验证。
二、实验目的1.理解并熟悉VHDL编程2.学会使用EDA工具进行设计和验证3.实践数字系统的建模和仿真三、实验过程1.VHDL编程根据实验要求,我们使用VHDL编程来实现一个4位2选1多路器。
首先,我们定义输入端口和输出端口,并声明所需的信号和变量。
然后,我们编写组合逻辑和时序逻辑以实现所需的功能。
最后,我们将实例化该多路器并指定其输入和输出端口。
2.EDA工具设计和验证我们选择了 Xilinx ISE Design Suite 作为我们的 EDA 工具。
首先,我们创建一个新的项目并选择相应的 FPGA 芯片。
然后,我们添加我们的VHDL 设计文件到项目中,并进行综合、布局和路由。
最后,我们使用仿真工具验证我们的设计。
四、实验结果经过实验,我们成功地编写并实例化了一个4位2选1多路器。
我们使用 Xilinx ISE Design Suite 进行综合、布局和路由,并成功验证了我们的设计。
五、实验总结通过本实验,我们掌握了VHDL编程和EDA工具的使用。
我们学会了使用VHDL描述数字系统,并使用EDA工具进行设计和验证。
这些技能对于电子设计和验证非常重要,并将有助于我们更好地理解和应用数字系统的原理和方法。
在实验过程中,我们也遇到了一些困难和挑战。
例如,我们可能需要更深入地了解VHDL编程的语法和方法,以及如何使用EDA工具的高级功能。
此外,我们还需要更多的实践来提高我们的设计和仿真技能。
总之,本实验有助于我们深入学习和理解数字系统的设计和验证。
通过实践和使用EDA工具,我们能够更好地应用所学知识,提高我们的设计和验证能力。
EDA实验汇总
实验汇总孙志伟集成06实验1 4选1数据选择器设计3.1 实验目的(1)学习EDA软件的基本操作(2)学习使用原理图进行设计(3) 初步掌握器件设计输入编译仿真编程的方法(4)学习实验开发系统的使用方法3.2 实验仪器与器材(1)EDA开发软件一套(2)微机一台(3)实验开发系统一台3.3 实验结果(1)编译并分配管脚后的原理图实验二四位比较器设计1、实验目的(1)设计四位二进制比较器,并在实验开发系统上验证(2)学习层次化设计方法2、实验仪器与器材(1)EDA开发软件一套(2)微机一台(3)实验开发系统一台(4)其它器件与材料若干3、实验源文件library ieee;use ieee.std_logic_1164.all;entity test isport( a: in std_logic_vector(3 downto 0);b: in std_logic_vector(3 downto 0);i1,i2,i3: in std_logic;G,M,L:out std_logic);end test;architecture behave of test isbeginp1:process(A,B,i1,i2,i3)beginif(A>B) then G<='1';M<='0';L<='0';elsif(A<B) then G<='0';M<='0';L<='1';elsif(A=B) then G<='0';M<='1';L<='0';if(i2='1') then G<='0';M<='1';L<='0';elsif(i1='1') then G<='1';M<='0';L<='0';elsif(i3='1') then G<='0';M<='0';L<='1';end if;end if;end process p1;end behave;实验三并行加法器设计1、实验目的(1)设计四位加法器。
EDA实验_实验内容安排
一、实验内容实验1(基本门,组合电路)•《实验指导书》实验2-1:按顺序完成00,02,04,08,32,86芯片•《实验指导书》实验2-3:按顺序完成148,138,153,85实验2(组合电路,门电路综合)•《实验指导书》实验2.3(283,4511),4511芯片在核心板上面,a-g脚已接好。
•《实验指导书》实验2.2(门电路综合实验)•做完还可以做:实验书p50的8选1选择器,课本例2-6,2-7(p77)实验3(MOde1Sim+自行编写代码)参考课本425mode1sim的使用,自行编写“符合电路”逻辑的代码和测试平台,并进行仿真。
提早完成的可以尝试不同的方法实现,或继续编写“裁判电路”和“交通灯错误检测电路”。
下课前抄到纸张上交上来,写明进行到哪一步,如代码编写/测试平台编写/正仿真(未通过)/仿真已通过。
实验4(综合实例5.6照搬)按照《教材》5.6,完整实现一次,要求烧录并接线进行实际测试实验5(简单芯片设计与验证)•按照《教材》5.6的完整流程,实现74芯片的设计,要求在实验箱上接线测试。
在纸上写出你通过测试的程序代码,及测试平台代码。
标明你做到哪一步(第几次仿真/综合/烧录/实际测试中/测试是否通过等)。
•提前做完的,可继续做检奇电路(4个输入信号中,高电平个数为奇数时,输出高电平,否则输出低电平)。
实验6(时序电路)•《实验指导书》实验2.4:在实验箱上进行74,112,194,161芯片的验证。
•提早做完的,继续做3.2(p53)的“3.用74HC16I设计十二进制计数器”注:时钟信号可由“C1OCK G ENARATION”部分生成(可手动,也可自动)希望不要再跟着指导书的指引接线,而是看着课本的真值表自行接线进行测试实验7(时序电路加强)《实验指导书》3.2的“2.数控分频器”(p53)实验8(综合设计)按教材“771计数器数码管显示译码器”(p386)进行设计,烧录并测试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二组合逻辑电路设计(一)设计一个四舍五入判别电路,其输入为842lBCD码,要求当输入大于或等于5时判别电路输为l,反之为0。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ZQF ISPORT(A:IN UNSIGNED (3 DOWNTO 0);BCD0,BCD1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);SEVEN0,SEVEN1:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ZQF ;ARCHITECTURE A OF ZQF ISSIGNAL XC:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(A)BEGINIF A<10 THENBCD1<="0000";BCD0<=STD_LOGIC_VECTOR(A);SEVEN1<="0111111";XC<=STD_LOGIC_VECTOR(A);ELSEBCD1<="0001";BCD0<=A-10;SEVEN1<="0000110";XC<=STD_LOGIC_VECTOR(A)-10;END IF;END PROCESS;SEVEN_SEGMENT:BLOCKBEGINSEVEN0<="0111111" WHEN XC="0000" ELSE"0000110" WHEN XC="0001" ELSE"1011011" WHEN XC="0010" ELSE"1001111" WHEN XC="0011" ELSE"1100110" WHEN XC="0100" ELSE"1101101" WHEN XC="0101" ELSE"1111101" WHEN XC="0110" ELSE"0000111" WHEN XC="0111" ELSE"1111111" WHEN XC="1000" ELSE"1101111" WHEN XC="1001" ELSE"0000000";END BLOCK SEVEN_SEGMENT;END A;实验五英语字母显示电路LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.STD_LOGIC_ARITH.ALL;use ieee.std_logic_unsigned.all;----------------------------------------------------entity zimum isport(clk: in std_logic;ledag:out std_logic_vector(6 downto 0));end zimum;architecture behave of zimum issignal clk1khzs: std_logic;signal charcnt: std_logic;signal cnt: integer range 0 to 7 :=0;BEGINprocess(clk)variable clknum:integer range 0 to 1999999 :=0;beginif clk'event and clk='1' thenif clknum=1999999 then clknum:=0;clk1khzs<= not clk1khzs; -----1s else clknum:=clknum+1;end if;end if;end process;process(clk1khzs)beginif clk1khzs'event and clk1khzs='1' thenif cnt=7 then cnt<=0;else cnt<=cnt+1;end if;end if;end process;process(cnt)begincase cnt iswhen 0=>ledag<="0110111"; ------Hwhen 1=>ledag<="1001111"; ------Ewhen 2=>ledag<="0001110"; ------Lwhen 3=>ledag<="0001110"; ------Lwhen 4=>ledag<="1001110"; ------Cwhen 5=>ledag<="1100111"; ------Pwhen 6=>ledag<="0001110"; ------Lwhen 7=>ledag<="1111101"; ------Dwhen others=>null;END CASE;end process;END ARCHITECTURE BEHAVE;实验九异步计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DFF_4ISPORT (CLK,KEY,RESET:IN STD_LOGIC;Q:BUFFER STD_LOGIC_VECTOR(0 TO 3));END DFF_4;ARCHITECTURE BEHAVE OF DFF_4ISCOMPONENT D_FFPORT(CLK,D,RESET:IN STD_LOGIC;Q,QN:OUT STD_LOGIC);END COMPONENT;SIGNAL KEY_FLAG:STD_LOGIC;SIGNAL CLK20HZ:STD_LOGIC;SIGNAL QN:STD_LOGIC_VECTOR(0 TO 3);SIGNAL CNT:STD_LOGIC;BEGINPROCESS(CLK)VARIABLE CLKNUM:INTEGER RANGE 0 TO 99999 :=0;BEGINIF CLK'EVENT AND CLK='1' THENIF CLKNUM=99999 THEN CLKNUM:=0;CLK20HZ<=NOT CLK20HZ;ELSE CLKNUM:=CLKNUM+1;END IF;END IF;END PROCESS;PROCESS(CLK20HZ)BEGINIF CLK20HZ'EVENT AND CLK20HZ='1' THENIF KEY='1' AND KEY_FLAG='0' THENKEY_FLAG<='1';ELSIF KEY='0' AND KEY_FLAG='1' THENKEY_FLAG<='0';END IF;END IF;END PROCESS;DFF1:D_FF PORT MAP(KEY_FLAG,QN(0),RESET,Q(0),QN(0));DFFX:FOR I IN 1 TO 3 GENERATEDFF2TO4: D_FF PORT MAP(QN(I-1),QN(I),RESET,Q(I),QN(I));END GENERATE;END BEHAVE;例化:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY D_FF ISPORT(CLK,D,RESET:IN STD_LOGIC;Q,QN:OUT STD_LOGIC);END ENTITY;ARCHITECTURE BEHAVE OF D_FF ISSIGNAL Q1:STD_LOGIC;BEGINPROCESS(CLK,RESET)BEGINIF RESET='1' THENQ1<='0';ELSIF CLK'EVENT AND CLK='1' THENQ1<=D;END IF;Q<=Q1;QN<=NOT Q1;END PROCESS;END BEHAVE;实验十九频率计1、设计一个3位十进制频率计,其测量范围为lMHz。
量程分l0KHz、100KHz、1MHz档(最大读数为9.99KHz,99.9KHz,999.9KHz),量程自动转换规则如下:(1)读数大于999时,频率计处于超量程状态,此时显示器发出溢出指示(最高位显示F其余各位不显示),下一次测量时,量程自动增加一档;(2)读数小于999时,频率计处于欠量程状态;下一次测量时,量程自动增大一档。
2、显示方式如下:(1)采用记忆显示方式,即计数过程中不显示数据,待计数过程结束后,显示计数结果并将此显示结果保持到下一个计数结束,显示时间不小于1秒;(2)小数点位置随量程变换自动移位;(3)送入信号应是符合CMOS电路要求的脉冲或正弦波;(4)设计符合上述功能的频率计,并用层次化方法设计电路;(5)控制器、计数器、锁存器的功能,用功能仿真方法验证,还可通过观察有关波形确认电路设计是否正确;(6)完成电路设计后在实验系统上下载,验证课题的正确性。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TEST19_5 ISPORT(CLK,FREQ:IN STD_LOGIC;CLK_1Hz: IN STD_LOGIC;LEDAG:OUT STD_LOGIC_VECTOR(0 TO 6);LEDP: OUT STD_LOGIC;LEDSEL:BUFFER STD_LOGIC_VECTOR(0 TO 2);RESET:IN STD_LOGIC);END ENTITY TEST19_5;ARCHITECTURE BEHAVE OF TEST19_5 ISSIGNAL CLK_1000Hz:STD_LOGIC;SIGNAL CLK_BASE:STD_LOGIC;SIGNAL RES100: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL RES10 : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL RES1 : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL FLAG:INTEGER RANGE 0 TO 2 :=0;SIGNAL LOCK100:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL LOCK10 :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL LOCK1 :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL LOCKX100:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL LOCKX10 :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL LOCKX1 :STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL DATA: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL SELNUM:INTEGER RANGE 0 TO 2;BEGINCLKBASE:PROCESS(CLK)VARIABLE CLKNUM:INTEGER RANGE 0 TO 250000 :=0;BEGINIF CLK'EVENT AND CLK='1' THENIF FLAG=0 AND CLKNUM=2500 THEN CLKNUM:=0;CLK_BASE<=NOT CLK_BASE;ELSIF FLAG=1 AND CLKNUM=25000 THEN CLKNUM:=0;CLK_BASE<=NOT CLK_BASE;ELSIF FLAG=2 AND CLKNUM=250000 THEN CLKNUM:=0;CLK_BASE<=NOT CLK_BASE;ELSE CLKNUM:=CLKNUM+1;END IF;END IF;END PROCESS CLKBASE;CLK1000Hz:PROCESS(CLK)VARIABLE CLKNUM:INTEGER RANGE 0 TO 2500 :=0;BEGINIF CLK'EVENT AND CLK='1' THENIF CLKNUM=2500 THEN CLKNUM:=0;CLK_1000Hz<=NOT CLK_1000Hz;ELSE CLKNUM:=CLKNUM+1;END IF;END IF;END PROCESS CLK1000Hz;COUNT: PROCESS(RESET,FREQ)BEGINIF RESET='1' THENRES100<="0000";RES10<="0000";RES1<="0000";ELSIF FREQ'EVENT AND FREQ='1' THENIF CLK_BASE='1' THENIF RES100="1010" THENRES100<="1010";ELSIF RES100="1001" AND RES10="1001" AND RES1="1001" THENRES100<="1010";RES10<="0000";RES1<="0000";ELSIF RES10="1001" AND RES1="1001" THENRES100<=RES100+1;RES10<="0000";RES1<="0000";ELSIF RES1="1001" THENRES10<=RES10+1;RES1<="0000";ELSERES1<=RES1+1;END IF;ELSIF CLK_BASE='0' THENRES100<="0000";RES10<="0000";RES1<="0000";END IF;END IF;END PROCESS COUNT;SEND:PROCESS(RESET,CLK_BASE) ¨BEGINIF RESET='1' THENLOCK100<="0000";LOCK10<="0000";LOCK1<="0000";FLAG<=0;ELSIF CLK_BASE'EVENT AND CLK_BASE='0' THENIF RES100="1010" THENIF FLAG>=1 THENFLAG<=FLAG-1;ELSE FLAG<=0;END IF;ELSIF RES100="0000" THENIF FLAG<=1 THENFLAG<=FLAG+1;ELSE FLAG<=2; END IF;--ELSE--FLAG<=FLAG;END IF;LOCK100<=RES100;LOCK10<=RES10;LOCK1<=RES1;END IF;END PROCESS SEND;SCAN:PROCESS(CLK_1000Hz)BEGINIF CLK_1000Hz'EVENT AND CLK_1000Hz='1' THENIF SELNUM=2 THENSELNUM<=0;ELSESELNUM<=SELNUM+1;END IF;END IF;END PROCESS SCAN;LOCK: PROCESS(CLK_1Hz)BEGINIF CLK_1Hz'EVENT AND CLK_1Hz='1' THENLOCKX100<=LOCK100;LOCKX10<=LOCK10;LOCKX1<=LOCK1;END IF;END PROCESS LOCK;VIEW1:PROCESS(SELNUM) BEGINCASE SELNUM ISWHEN 0 =>LEDSEL<="011";DATA<=LOCKX100;WHEN 1 =>LEDSEL<="101";DATA<=LOCKX10;WHEN 2 =>LEDSEL<="110";DATA<=LOCKX1;END CASE;IF FLAG=2 AND LEDSEL="011" THEN LEDP<='1' ;ELSIF FLAG=1 AND LEDSEL="101" THEN LEDP<='1';--ELSIF FLAG=0 AND LEDSEL="110" THEN LEDP<='1';ELSE LEDP<='0';END IF;END PROCESS VIEW1;VIEW2:PROCESS(DATA)BEGINCASE DATA ISWHEN "0000"=>LEDAG<="1111110";WHEN "0001"=>LEDAG<="0110000";WHEN "0010"=>LEDAG<="1101101";WHEN "0011"=>LEDAG<="1111001"; WHEN "0100"=>LEDAG<="0110011"; WHEN "0101"=>LEDAG<="1011011"; WHEN "0110"=>LEDAG<="1011111"; WHEN "0111"=>LEDAG<="1110000"; WHEN "1000"=>LEDAG<="1111111"; WHEN "1001"=>LEDAG<="1111011"; WHEN OTHERS=>LEDAG<="0000000"; END CASE;END PROCESS VIEW2;。