文档库 最新最全的文档下载
当前位置:文档库 › VHDL实验报告

VHDL实验报告

VHDL实验报告
VHDL实验报告

实验者:黄成勇学号:3110008723

班级:电子(4)班日期:2012年12月30日

实验一:应用Quart us II 完成基本组合电路设计

(1) 实验目的:熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。

(2) 实验容1:首先利用QuartusⅡ完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出仿真波形。最后在实验系统上进行硬件测试,验证本项设计的功能。

2选1多路选择器:

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY mux21a IS

PORT ( a, b, s: IN BIT;

y : OUT BIT );

END ENTITY mux21a;

ARCHITECTURE one OF mux21a IS

BEGIN

PROCESS (a,b,s)

BEGIN

IF s = '0' THEN y <= a ; ELSE y <= b ;

END IF;

END PROCESS;

END ARCHITECTURE one ;

双2选1多路选择器

2选1多路选择器功能时序波形

(3) 实验容2:将此多路选择器看成是一个元件mux21a,利用元件例化语句。

例化程序:

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY mux31a IS

PORT ( a1, a2,a3, s0,s1: IN STD_LOGIC;

outy : OUT STD_LOGIC );

END ENTITY mux31a;

ARCHITECTURE bhv OF mux31a IS

COMPONENT(a,b: IN STD_LOGIC;

s: IN STD_LOGIC);

END COMPONENT;

BEGIN

u1 : 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 BHV ;

(4) 实验容3:引脚锁定以及硬件下载测试。若选择目标器件是EP1C3,建议选实验电路模式5(附录图7),用键1(PIO0,模式5中为PIO233,引脚号为1)控制s0;用键2(PIO1,234,引脚号为2)控制s1;a3、a2 和a1 分别接clock5(引脚号为16)、clock0(引脚号为93)和clock2(引脚号为17);输出信号outy 仍接扬声器spker(引脚号为129)。通过短路帽选择clock0接256Hz 信号,clock5接1024Hz,clock2接8Hz 信号。最后进行编译、下载和硬件测试实验(通过选择键1、键2,控制s0、s1,可使扬声器输出不同音调)。

实验二:在Quartus II中用原理图输入法设计8位全加器

(1) 实验目的:熟悉利用QuartusⅡ的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个8 位全加器的设计把握利用EDA软件进行原理图输入方式的电子线路设计的详细流程。

(2) 实验原理:一个8 位全加器可以由8 个1 位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout 与相临的高位加法器的最低进位输入信号cin 相接。而一个1 位全加器可以按照6.1 节的方法来完成。

(3) 实验容1:按照书本介绍的方法与流程,完成半加器和全加器的设计,包括原理图输入、编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设置成一个硬件符号入库。键1、键2、键3(PIO0/1/2)分别接ain、bin、cin;发光管D2、D1(PIO9/8)分别接sum 和cout。

半加器设计:

全加器设计:

(4) 实验容2,建立一个更高层次的原理图设计,利用以上获得的1 位全加器构成8 位全加器,并完成编译、综合、适配、仿真和硬件测试。建议选择电路模式1(附录图3);键2、键1 输入8 位加数;键4、键3 输入8 位被加数;数码6/5 显示加和;D8 显示进位cout。

八位全加器设计:

实验三:8位16进制频率计设计

(1) 实验目的:设计8 位16 进制频率计,学习较复杂的数字系统设计方法。

(2)实验原理:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1 秒的输入信号脉冲计数允许的信号;1 秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生,即图7-34 中的FTCTRL。根据测频原理,测频控制时序可以如图所示。

(3) 实验容1:分别仿真测试模块例7-7、例7-8 和例7-9,再结合例7-10 完成频率计的完整设计和硬件实现,并给出其测频时序波形及其分析。建议选实验电路模式5;8 个数码管以16 进制形式显示测频输出;待测频率输入FIN 由clock0 输入,频率可选4Hz、256HZ、3Hz...50MHz 等;1HZ 测频控制信号CLK1HZ 可由clock2 输入(用跳线选1Hz)。注意,这时8 个数码管的测频显示值是16 进制的。

【例7-7】

LIBRARY IEEE; --测频控制电路

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY FTCTRL IS

PORT (CLKK : IN STD_LOGIC; -- 1Hz

CNT_EN : OUT STD_LOGIC; -- 计数器时钟使能

RST_CNT : OUT STD_LOGIC; -- 计数器清零

Load : OUT STD_LOGIC ); -- 输出锁存信号

END FTCTRL;

ARCHITECTURE behav OF FTCTRL IS

SIGNAL Div2CLK : STD_LOGIC;

BEGIN

PROCESS( CLKK )

BEGIN

IF CLKK'EVENT AND CLKK = '1' THEN -- 1Hz时钟2分频

Div2CLK <= NOT Div2CLK;

END IF;

END PROCESS;

PROCESS (CLKK, Div2CLK)

BEGIN

IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1';-- 产生计数器清零信号ELSE RST_CNT <= '0'; END IF;

END PROCESS;

Load <= NOT Div2CLK; CNT_EN <= Div2CLK;

END behav;

【例7-8】

LIBRARY IEEE; --32位锁存器

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY REG32B IS

PORT ( LK : IN STD_LOGIC;

DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );

END REG32B;

ARCHITECTURE behav OF REG32B IS

BEGIN

PROCESS(LK, DIN)

BEGIN

IF LK'EVENT AND LK = '1' THEN DOUT <= DIN;

END IF;

END PROCESS;

END behav;

【例7-9】

LIBRARY IEEE; --32位计数器

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COUNTER32B IS

PORT (FIN : IN STD_LOGIC; -- 时钟信号

CLR : IN STD_LOGIC; -- 清零信号

ENABL : IN STD_LOGIC; -- 计数使能信号

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果

END COUNTER32B;

ARCHITECTURE behav OF COUNTER32B IS

SIGNAL CQI : STD_LOGIC_VECTOR(31 DOWNTO 0);

BEGIN

PROCESS(FIN, CLR, ENABL)

BEGIN

IF CLR = '1' THEN CQI <= (OTHERS=>'0'); -- 清零

ELSIF FIN'EVENT AND FIN = '1' THEN

IF ENABL = '1' THEN CQI <= CQI + 1; END IF;

END IF;

END PROCESS;

DOUT <= CQI;

END behav;

【例7-10】

LIBRARY IEEE; --频率计顶层文件

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY FREQTEST IS

PORT ( CLK1HZ : IN STD_LOGIC;

FSIN : IN STD_LOGIC;

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );

END FREQTEST;

ARCHITECTURE struc OF FREQTEST IS

COMPONENT FTCTRL

PORT (CLKK : IN STD_LOGIC; -- 1Hz

CNT_EN : OUT STD_LOGIC; -- 计数器时钟使能

RST_CNT : OUT STD_LOGIC; -- 计数器清零

Load : OUT STD_LOGIC ); -- 输出锁存信号

END COMPONENT;

COMPONENT COUNTER32B

PORT (FIN : IN STD_LOGIC; -- 时钟信号

CLR : IN STD_LOGIC; -- 清零信号

ENABL : IN STD_LOGIC; -- 计数使能信号

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果END COMPONENT;

COMPONENT REG32B

PORT ( LK : IN STD_LOGIC;

DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );

END COMPONENT;

SIGNAL TSTEN1 : STD_LOGIC;

SIGNAL CLR_CNT1 : STD_LOGIC;

SIGNAL Load1 : STD_LOGIC;

SIGNAL DTO1 : STD_LOGIC_VECTOR(31 DOWNTO 0);

SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO 0);

BEGIN

U1 : FTCTRL PORT MAP(CLKK =>CLK1HZ,CNT_EN=>TSTEN1,

RST_CNT =>CLR_CNT1,Load =>Load1);

U2 : REG32B PORT MAP( LK => Load1, DIN=>DTO1, DOUT => DOUT);

U3 : COUNTER32B PORT MAP( FIN => FSIN, CLR => CLR_CNT1,

ENABL => TSTEN1, DOUT=>DTO1 );

END struc;

由实验对相应的数据端口设计:

而实验代码对应的实验原理图为:

(4) 实验容2:参考例3-22,将频率计改为8 位10 进制频率计,注意此设计电路的计数器必须是8 个4 位的10进制计数器,而不是1 个。此外注意在测频速度上给予优化。

十进制频率计数器设计程序:

LIBRARY IEEE;-- 8位十进制计数器

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COUNTER IS

PORT (FIN : IN STD_LOGIC; -- 时钟信号

CLR : IN STD_LOGIC; -- 清零信号

ENABL : IN STD_LOGIC; -- 计数使能信号

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果

END COUNTER;

ARCHITECTURE behav OF COUNTER IS

COMPONENT COUNTER10 IS

PORT (FIN : IN STD_LOGIC; -- 时钟信号

CLR : IN STD_LOGIC; -- 清零信号

ENABL : IN STD_LOGIC; -- 计数使能信号

DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- 计数结果

COUT : OUT STD_LOGIC);

END COMPONENT ;

SIGNAL CLK1,CLK2,CLK3,CLK4,CLK5,CLK6,CLK7: STD_LOGIC;

BEGIN

u1 : COUNTER10 PORT MAP(FIN=>FIN,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(3 DOWNTO 0),COUT=>CLK1);

u2 : COUNTER10 PORT MAP(FIN=>CLK1,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(7 DOWNTO

4),COUT=>CLK2);

u3 : COUNTER10 PORT MAP(FIN=>CLK2,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(11 DOWNTO

8),COUT=>CLK3);

u4 : COUNTER10 PORT MAP(FIN=>CLK3,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(15 DOWNTO

12),COUT=>CLK4);

u5 : COUNTER10 PORT MAP(FIN=>CLK4,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(19 DOWNTO

16),COUT=>CLK5);

u6 : COUNTER10 PORT MAP(FIN=>CLK5,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(23 DOWNTO

20),COUT=>CLK6);

u7 : COUNTER10 PORT MAP(FIN=>CLK6,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(27 DOWNTO

24),COUT=>CLK7);

u8 : COUNTER10 PORT MAP(FIN=>CLK7,CLR=>CLR,ENABL=>ENABL,DOUT=>DOUT(31 DOWNTO 28));

END ARCHITECTURE behav;

(5)实验容3:用LPM模块取代例7-8 和例7-9,再完成同样的设计任务。

(6) 实验容4:用嵌入式锁相环PLL 的LPM模块对实验系统的

50MHz 或20MHz 时钟源分频率,PLL 的输出信号作为频率计的待测信号。注意PLL的输入时钟必须是器件的专用时钟输入脚CLK pin16(clock5)或pin17(clock2),且输入频率不能低于16MHz。(实验中可以将50MHz 频率用线引向Clock2,但要拔除其上的短路帽)

(7)设计要求:FTCTRL的计数使能信号CNT_EN能产生一个1 秒脉宽的周期信号,并对频率计中的32 位二进制计数器COUNTER32B(图7-34)的ENABL 使能端进行同步控制。当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD 的上跳沿将计数器在前1 秒钟的计数值锁存进锁存器REG32B中,并由外部的16 进制7 段译码器译出,显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清0 信号而不断闪烁。锁存信号后,必须有一清0 信号RST_CNT 对计数器进行清零,为下1 秒的计数操作作准备。

实验四:数控分频器与乐曲硬件演奏电路设计

乐曲硬件演奏电路设计:

(1) 实验目的:学习利用实验5-3 的数控分频器设计硬件乐曲演奏电路。

(2) 实验原理:主系统由3 个模块组成,例10-29 是顶层设计文件,其部有3 个功能模

块(如图10-3 所示):TONETABA.VHD、NOTETABS.VHD 和SPEAKER.VHD。

图 10-3 硬件乐曲演奏电路结构(Synplify 综合)

与利用微处理器(CPU或MCU)来实现乐曲演奏相比,以纯硬件完成乐曲演奏电路的逻辑要复杂得多,如果不借助于功能强大的EDA工具和硬件描述语言,仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。本实验设计项目作为“梁祝”乐曲演奏电路的实现。我们知道,组成乐曲的每个音符的发音频率值及其持续的时间是乐曲能连续演奏所需的两个基本要素,问题是如何来获取这两个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的演奏效果。图10-3 中,模块U1 类似于弹琴的人的手指;U2 类似于琴键;U3 类似于琴弦或音调发声器。下面首先来了解图 10-3 的工作原理:

1、音符的频率可以由图10-3 中的SPEAKERA获得,这是一个数控分频器(其详细工作原理

可参考实验5-3)。由其clk 端输入一具有较高频率(这里是12MHz)的信号,通过SPEAKERA 分频后由SPKOUT输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的频率将是原来的1/2。SPEAKERA对clk输入信号的分频比由11位预置数Tone[10..0]决定。SPKOUT的输出频率将决定每一音符的音调,这样,分频计数器的预置值Tone[10..0] 与SPKOUT 的输出频率,就有了对应关系。例如在TONETABA 模块中若取Tone[10..0]=1036,将发音符为"3"音的信号频率。

2、音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,图10-3 中模块TONETABA

的功能首先是为SPEAKERA 提供决定所发音符的分频预置数,而此数在SPEAKER 输入口停留的时间即为此音符的节拍值。模块TONETABA 是乐曲简谱码对应的分频预置数查表电路,其中设置了“梁祝”乐曲全部音符所对应的分频预置数,共13个,每一音符的停留时间由音乐节拍和音调发生器模块NOTETABS的clk的输入频率决定,在此为4Hz。这13个值的输出由对应于TONETABA 的4位输入值Index[3..0]确定,而Index[3..0]最多有16种可选值。输向TONETABA中Index[3..0]的值Tone Index[3..0]的输出值与持续的时间由模块NOTETABS 决定。

3、在NOTETABS 中设置了一个8位二进制计数器(计数最大值为138),作为音符数据ROM的地址发生器。这个计数器的计数频率选为4Hz,即每一计数值的停留时间为0.25秒,恰为当

全音符设为1秒时,四四拍的4分音符持续时间。例如,NOTETABS 在以下的VHDL逻辑描述中,“梁祝”乐曲的第一个音符为“3”,此音在逻辑中停留了4个时钟节拍,即1秒时间,相应地,所对应的“3”音符分频预置值为1036,在SPEAKERA 的输入端停留了1秒。随着NOTETABS中的计数器按4Hz 的时钟速率作加法计数时,即随地址值递增时,音符数据ROM 中的音符数据将从ROM 过Tone Index[3..0]端口输向TONETABA 模块,“梁祝”乐曲就开始连续自然地演奏起来了。

(3) 实验容1:定制例10-32 的Note Tabs 模块中的音符数据ROM“music”。该ROM中的

音符数据已列在例10-33中。注意该例数据表中的数据位宽、深度和数据的表达类型。此外,为了节省篇幅,例中的数据都横排了,实用中应该以每一分号为一行来展开,否则会出错。最后对该 ROM 进行仿真,确认例10-33 中的音符数据已经进入ROM 中。

(4) 实验容2:根据给出的乘法器逻辑原理图及其各模块的VHDL描述,在QuartusII 上

完成全部设计,包括编辑、编译、综合和仿真操作等。给出仿真波形,并作出详细说明。

【例 3-1】

LIBRARY IEEE; -- 硬件演奏电路顶层设计

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY Songer IS

PORT ( CLK12MHZ : IN STD_LOGIC; --音调频率信号

CLK8HZ : IN STD_LOGIC; --节拍频率信号

CODE1 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);-- 简谱码输出显示

HIGH1 : OUT STD_LOGIC; --高8度指示

SPKOUT : OUT STD_LOGIC );--声音输出

END;

ARCHITECTURE one OF Songer IS

COMPONENT NoteTabs

PORT ( clk : IN STD_LOGIC;

ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );

END COMPONENT;

COMPONENT ToneTaba

PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;

CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;

HIGH : OUT STD_LOGIC;

Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) );

END COMPONENT;

COMPONENT Speakera

PORT ( clk : IN STD_LOGIC;

Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);

SpkS : OUT STD_LOGIC );

END COMPONENT;

SIGNAL Tone : STD_LOGIC_VECTOR (10 DOWNTO 0);

SIGNAL ToneIndex : STD_LOGIC_VECTOR (3 DOWNTO 0);

BEGIN

u1 : NoteTabs PORT MAP (clk=>CLK8HZ, ToneIndex=>ToneIndex);

u2 : ToneTaba PORT MAP (Index=>ToneIndex,Tone=>Tone,CODE=>CODE1,HIGH=>HIGH1); u3 : Speakera PORT MAP(clk=>CLK12MHZ,Tone=>Tone, SpkS=>SPKOUT );

END;

【例 3-2】

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY Speakera IS

PORT ( clk : IN STD_LOGIC;

Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0);

SpkS : OUT STD_LOGIC );

END;

ARCHITECTURE one OF Speakera IS

SIGNAL PreCLK, FullSpkS : STD_LOGIC;

BEGIN

DivideCLK : PROCESS(clk)

VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ;

BEGIN

PreCLK <= '0'; -- 将CLK进行16分频,PreCLK为CLK的16分频

IF Count4>11 THEN PreCLK <= '1'; Count4 := "0000";

ELSIF clk'EVENT AND clk = '1' THEN Count4 := Count4 + 1;

END IF;

END PROCESS;

GenSpkS : PROCESS(PreCLK, Tone)-- 11位可预置计数器

VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0);

BEGIN

IF PreCLK'EVENT AND PreCLK = '1' THEN

IF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS <= '1';

ELSE Count11 := Count11 + 1; FullSpkS <= '0'; END IF;

END IF;

END PROCESS;

DelaySpkS : PROCESS(FullSpkS)--将输出再2分频,展宽脉冲,使扬声器有足够功率发音VARIABLE Count2 : STD_LOGIC;

BEGIN

IF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2;

IF Count2 = '1' THEN SpkS <= '1';

ELSE SpkS <= '0'; END IF;

END IF;

END PROCESS;

END;

【例 3-3】

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY ToneTaba IS

PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ;

CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ;

HIGH : OUT STD_LOGIC;

Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) );

END;

ARCHITECTURE one OF ToneTaba IS

BEGIN

Search : PROCESS(Index)

BEGIN

CASE Index IS -- 译码电路,查表方式,控制音调的预置数

WHEN "0000" => Tone<="11111111111" ; CODE<="0000"; HIGH <='0';-- 2047 WHEN "0001" => Tone<="01100000101" ; CODE<="0001"; HIGH <='0';-- 773; WHEN "0010" => Tone<="01110010000" ; CODE<="0010"; HIGH <='0';-- 912; WHEN "0011" => Tone<="10000001100" ; CODE<="0011"; HIGH <='0';--1036; WHEN "0101" => Tone<="10010101101" ; CODE<="0101"; HIGH <='0';--1197; WHEN "0110" => Tone<="10100001010" ; CODE<="0110"; HIGH <='0';--1290; WHEN "0111" => Tone<="10101011100" ; CODE<="0111"; HIGH <='0';--1372; WHEN "1000" => Tone<="10110000010" ; CODE<="0001"; HIGH <='1';--1410; WHEN "1001" => Tone<="10111001000" ; CODE<="0010"; HIGH <='1';--1480; WHEN "1010" => Tone<="11000000110" ; CODE<="0011"; HIGH <='1';--1542; WHEN "1100" => Tone<="11001010110" ; CODE<="0101"; HIGH <='1';--1622; WHEN "1101" => Tone<="11010000100" ; CODE<="0110"; HIGH <='1';--1668; WHEN "1111" => Tone<="11011000000" ; CODE<="0001"; HIGH <='1';--1728; WHEN OTHERS => NULL;

END CASE;

END PROCESS;

END;

【例 3-4】

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY NoteTabs IS

PORT ( clk : IN STD_LOGIC;

ToneIndex : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );

END;

ARCHITECTURE one OF NoteTabs IS

COMPONENT MUSIC --音符数据ROM

PORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);

inclock : IN STD_LOGIC ;

q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

END COMPONENT;

SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0);

BEGIN

CNT8 : PROCESS(clk, Counter)

BEGIN

IF Counter=138 THEN Counter <= "00000000";

ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter+1; END IF;

END PROCESS;

u1 : MUSIC PORT MAP(address=>Counter , q=>ToneIndex, inclock=>clk);

END;

【例 10-33】

WIDTH = 4 ; --“梁祝”乐曲演奏数据

DEPTH = 256 ;

ADDRESS_RADIX = DEC ;

DATA_RADIX = DEC ;

CONTENT BEGIN --注意,以下的数据排列方法只是为了节省空间,实用文件中要展开以下数据,每一组占一行

00: 3 ; 01: 3 ; 02: 3 ; 03: 3; 04: 5; 05: 5; 06: 5;07: 6; 08: 8; 09: 8;

10: 8 ; 11: 9 ; 12: 6 ; 13: 8; 14: 5; 15: 5; 16: 12;17: 12;18: 12; 19:15;

20:13 ; 21:12 ; 22:10 ; 23:12; 24: 9; 25: 9; 26: 9; 27: 9; 28: 9; 29: 9;

30: 9 ; 31: 0 ; 32: 9 ; 33: 9; 34: 9; 35:10; 36: 7; 37: 7; 38: 6; 39: 6;

40: 5 ; 41: 5 ; 42: 5 ; 43: 6; 44: 8; 45: 8; 46: 9; 47: 9; 48: 3; 49: 3;

50: 8 ; 51: 8 ; 52: 6 ; 53: 5; 54: 6; 55: 8; 56: 5; 57: 5; 58: 5; 59: 5;

60: 5 ; 61: 5 ; 62: 5 ; 63: 5; 64:10; 65:10; 66:10; 67:12; 68: 7; 69: 7;

70: 9 ; 71: 9 ; 72: 6 ; 73: 8; 74: 5; 75: 5; 76: 5; 77: 5; 78: 5; 79: 5;

80: 3 ; 81: 5 ; 82: 3 ; 83: 3; 84: 5; 85: 6; 86: 7; 87: 9; 88: 6; 89: 6;

90: 6 ; 91: 6 ; 92: 6 ; 93: 6; 94: 5; 95: 6; 96: 8; 97: 8; 98: 8; 99: 9;

100:12 ;101:12 ;102:12 ;103:10;104: 9;105: 9;106:10;107: 9;108: 8;109: 8;

110: 6 ;111: 5 ;112: 3 ;113: 3;114: 3;115: 3;116: 8;117: 8;118: 8;119: 8;

120: 6 ;121: 8 ;122: 6 ;123: 5;124: 3;125: 5;126: 6;127: 8;128: 5;129: 5;

130: 5 ;131: 5 ;132: 5 ;133: 5;134: 5;135: 5;136: 0;137: 0;138: 0;

END ;

(5) 实验容3:硬件验证。先将引脚锁定,使CLK12MHz 与clock9 相接,接受12MHz 时

钟频率(用短路帽在clock9接“12MHz”);CLK8Hz 与clock2相接,接受4Hz频率;发音输出SPKOUT接Speaker;与演奏发音相对应的简谱码输出显示可由CODE1 在数码管5 显示;HIGH1 为高八度音指示,可由发光管D5 指示,最后向目标芯片下载适配后的 SOF 逻辑设计文件。实验电路结构图为NO.1。

(6) 实验容4:填入新的乐曲,如“采茶舞曲”、或其它熟悉的乐曲。操作步骤如下:1、根据所填乐曲可能出现的音符,修改例10-3 的音符数据表格,同时注意每一音符的节

拍长短;

2、如果乐曲比较长,可增加模块NOTETABA 中计数器的位数,如9 位时可达512 个基本节拍。

VHDL实验报告

《创新实验》实验报告 —基于VHDL的编程和硬件实现

一、实验目的 1.熟悉和掌握硬件描述语言VHDL的基本语法及编写; 2.掌握软件Xilinx ISE 10.1的使用; 3.熟悉SDZ-6电子技术实验箱的使用; 4.了解节拍脉冲发生器等基本电路的实现; 5.了解八位二进制计数器的功能与设计; 6.学习键盘和七段数码管显示的控制和设计。 二、实验内容 1.Xilinx ISE 10.1软件的使用; 2.节拍脉冲发生器等基本电路的实现; 3.八位二进制计数器的实现 4.键盘扫描及显示的实现 三、实验器材 1、PC机 2、SDZ-6电子技术实验箱 3、正负5V电源 4、I/O接口线 四、软件的使用 在安装Xilinx10.1软件时,需要一个ID号,其实这个ID号是可以重复使用的,几个同学在官网注册后就可以共享ID号了。 安装完成之后就可以使用这个软件编写相应的VHDL的程序。 1.新建工程 File—>New Project 弹出下面的对话框 输入工程名后单击Next。然后根据本实验的实验箱进行以下设置。

以后的步骤一般都是单击Next(有些资料上会介绍有些这些步骤的具体功能,但对于本实验不必用到),最后单击Finish,完成新建一个工程。在窗口的左边会出现刚刚新建的工程,如下: 2.新建一个VHDL的源文件。 在上图中,右击工程选择New Source ,弹出如下对话框。

在对画框的左边选择VHDL Module,输入文件的名字(改名字最好是你定义的实体的名字)。单击Next。出现下面的对话框。 该对话框主要是对外部端口的编辑。可以直接跳过,即单击Next,在源文件上编辑端口。然后在接下来的对话框中单击Finish。完成建立一个源文件。窗口右边就会出现刚才编辑的源文件。 3.编写和编译代码 将事先编好的代码复制到源文件里,然后保存文件。 选中左边的文件名,在窗体的左边出现如下编辑文档内容。

VHDL实验报告03137

VHDL实验报告 60 庄炜旭实验三. 4位可逆计数器,4位可逆二进制代码-格雷码转换器设计 一.实验目的 学习时序电路的设计,仿真和硬件测试,进一步熟悉VHDL设计技术 1. 学习4位可逆计数器的设计 2. 学习4位可逆二进制代码-格雷码转换器设计 二.实验内容 设计4位可逆计数器,及4位可逆二进制代码-格雷码转换器,并仿真,下载。 [具体要求] 1.4位可逆计数器 a)使用CLOCK_50作为输入时钟,其频率为50MHz(对于频率大于50Hz的闪烁, 人眼会看到连续的光),因而,对其进行225的分频后,再用于时钟控制。(可 利用实验一) b)使用拨码开关SW17作为模式控制,置‘1’时为加法计数器,置‘0’时为减 法计数器,同时使用LEDR17显示SW17的值。 c)使用KEY3作为异步复位开关(按下时为0,不按为1),当为加法计数器时, 置“0000”,当为减法计数器时,置“1111”。 d)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高 位,LEDR0为低位。 2.4位可逆二进制代码――格雷码转换器 a)使用拨码开关SW17作为模式控制,置‘1’时为二进制代码―>格雷码转换, 置‘0’时为格雷码―>二进制代码,同时使用LEDR17显示SW17的值。 b)使用拨码开关SW3, SW2, SW1, SW0作为输入的被转换数,SW3为高位,SW0 为低位。 c)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高 位,LEDR0为低位。 三.管脚设定 SW[0]PIN_N25 SW[1]PIN_N26 SW[2]PIN_P25 SW[3] PIN_AE14 SW[17] PIN_V2 LEDR[0] PIN_AE23 LEDR[1] PIN_AF23 LEDR[2] PIN_AB21 LEDR[3] PIN_AC22 LEDR[17] PIN_AD12 KEY[3] PIN_W26

基于VHDL语言的EDA实验报告(附源码)

EDA 实验报告 ——多功能电子钟 姓名:张红义 班级:10级电科五班 学号:1008101143 指导老师:贾树恒

电子钟包括:主控模块,计时模块,闹钟模块,辅控模块,显示模块,蜂鸣器模块,分频器模块。 1.主控模块: 主要功能:控制整个系统,输出现在的状态,以及按键信息。 源代码: libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_arith.all; useieee.std_logic_unsigned.all; entity mc is port(functionswitch,k,set,lightkey: in std_logic; chose21,setout: out std_logic; lightswitch:bufferstd_logic; modeout,kmodeout : out std_logic_vector(1 downto 0); setcs,setcm,setch,setas,setam,setah:outstd_logic); end mc; architecture work of mc is signalmode,kmode:std_logic_vector(1 downto 0); signal light,chose21buf:std_logic; signalsetcount:std_logic_vector(5 downto 0); begin process(functionswitch,k,set,lightkey) begin iffunctionswitch'event and functionswitch='1' then mode<=mode+'1'; end if; iflightkey'event and lightkey='1' then lightswitch<=not lightswitch; end if; if mode="01" thenchose21buf<='0'; else chose21buf<='1'; end if; ifk'event and k='1' then if mode="01" or mode="11" then kmode<=kmode+'1'; end if;end if; if set='1' then if mode = "01" then ifkmode="01" then setcount<="000001"; elsifkmode="10" thensetcount<="000010"; elsifkmode="11" then setcount<="000100";

VHDL实验报告论文

硬件描述语言期末实验报告 题目:硬件描述语言实现秒表功能 姓名xxxx 学号xxxxxxxxxx 年级专业xxxxxxxxxxxxx 指导教师xxxx 2012年6月20日

河北大学本科生VHDL硬件实验论文(设计) 硬件描述语言实现秒表功能 摘要 应用VHDL语言设计数字系统,很多设计工作可以在计算机上完成,从而缩短了数字系统的开发时间。我们尝试利用VHDL为开发工具设计数字秒表。 秒表的逻辑结构较简单,它主要由十进制计数器、六进制计数器、数据选择器、和显示译码器等组成。在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外整个秒表还需有一个启动信号,暂停信号和一个清零信号,以便秒表能随意停止及启动。 关键词:VHDL语言数字秒表时序仿真图

目录 一、实验目的 (1) 二、硬件要求 (1) 三、引脚说明 (1) 四、模块介绍 (2) 4.1.计数器(六、十进制) (2) 4.2.蜂鸣器 (2) 4.3.译码器 (3) 4.4.控制器 (4) 五、整体连接图 (5) 六、实验结果 (6) 七、实验总结 (6) 八、谢辞 (7) 九、附录 (7)

一实验目的 学习使用VHDL语言,以及EDA芯片的下载仿真。 二硬件要求 (1)主芯片EPF10K10LC84-4。 (2)蜂鸣器。 (3)8位八段扫描共阴极数码显示管。 (4)二个按键(暂停,开关)。 三引脚说明 3.1引脚设置 3.2信号说明 signal q:std_logic_vector(3 downto 0); --q是用于分频的信号。 signal state: std_logic_vector(3 downto 0); --state为状态信号,state为1时为暂停记录状态,为0时为正常显示计数状态。signal led: std_logic_vector(3 downto 0); --led为数码管扫描信号,通过对d1~d6的选择使数码管发光。

VHDL实验报告

专用集成电路实验报告 13050Z01 1305024237 刘德文

实验一开发平台软件安装与认知实验 实验内容 1、本实验以三线八线译码器(LS74138)为例,在Xilinx ISE 9.2软件平台上完成设计 电路的VHDL文本输入、语法检查、编译、仿真、管脚分配和编程下载等操作。下载芯片选择Xilinx公司的CoolRunner II系列XC2C256-7PQ208作为目标仿真芯片。 2、用1中所设计的的三线八线译码器(LS74138)生成一个LS74138元件,在Xilinx ISE 9.2软件原理图设计平台上完成LS74138元件的调用,用原理图的方法设计三线八线译 码器(LS74138),实现编译,仿真,管脚分配和编程下载等操作。 源程序: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all; entity ls74138 is Port ( g1 : in std_logic; g2 : in std_logic; inp : in std_logic_vector(2 downto 0); y : out std_logic_vector(7 downto 0)); end ls74138; architecture Behavioral of ls74138 is begin process(g1,g2,inp) begin if((g1 and g2)='1') then case inp is when "000"=>y<="00000001"; when "001"=>y<="00000010";

vhdl实验报告--蜂鸣器

VHDL 实验报告 一、实验目的 1、掌握蜂鸣器的使用; 2、通过复杂实验,进一步加深对VHDL语言的掌握程度。 二、实验原理乐曲都是由一连串的音符组成,因此按照乐曲的乐谱依次输出这些音符所对应的频率,就可以在蜂鸣器上连续地发出各个音符的音调。而要准确地演奏出一首乐曲,仅仅让蜂鸣器能够发声是不够的,还必须准确地控制乐曲的节奏,即每个音符的持续时间。由此可见,乐曲中每个音符的发音频率及其持续的时间是乐曲能够连续演奏的两个关键因素。 乐曲的12 平均率规定:每2 个八度音(如简谱中的中音1 与高音1)之间的频率相差1 倍。在2个八度音之间,又可分为12个半音。另外,音符A(简谱中的低音6)的频率为440Hz, 音符B到C之间、E到F之间为半音,其余为全音。由此可以计算出简谱中从低音I至高音1 之间每个音符的频率,如表所示。 音名频率/Hz 音名频率/Hz 音名频率/Hz 低音1 中音1 高音1 低音2 中音2 高音2 低音3 中音3 高音3 低音4 中音4 高音4 低音5 392 中音5 784 高音5 1568 低音6 440 中音6 880 高音6 1760 低音7 中音7 高音7 表简谱音名与频率的对应关系 产生各音符所需的频率可用一分频器实现, 由于各音符对应的频率多为非整数, 而分频系数又不能为小数, 故必须将计算得到的分频数四舍五入取整。若分频器时钟频率过低, 则由于分频系数过小, 四舍五入取整后的误差较大;若时钟频率过高,虽然误差变小,但分频数将变大。实际的设计应综合考虑两方面的因素, 在尽量减小频率误差的前提下取合适的时钟频率。实际上,只要各个音符间的相对频率关系不变,演奏出的乐曲听起来都不会走调。 音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定。因此, 要控制音符的音 长,就必须知道乐曲的速度和每个音符所对应的节拍数, 本例所演奏的乐曲的最短的音符为四分音符,如果将全音符的持续时间设为1s 的话,那么一拍所应该持续的时间为秒,则只需要提供一个4HZ的时钟频率即可产生四分音符的时长。 本例设计的音乐电子琴选取40MHZ的系统时钟频率。在数控分频器模块,首先对时钟频率进行40分频,得到1MHZ的输入频率,然后再次分频得到各音符的频率。由于数控分频器 输出的波形是脉宽极窄的脉冲波, 为了更好的驱动蜂鸣器发声, 在到达蜂鸣器之前需要均衡占空比, 从而生成各音符对应频率的对称方波输出。这个过程实际上进行了一次二分频, 频率变为原来的二分之一即。 因此,分频系数的计算可以按照下面的方法进行。以中音1为例,对应的频率值为 523. 3Hz,它的分频系数应该为: 0.375MHZ 0.375 106 716 523.3 523.3

vhdl实验报告

福建农林大学计算机与信息学院 信息工程类 实验报告 2013年11 月13 日

实验项目列表

福建农林大学计算机与信息学院信息工程类实验报告 系:电子信息工程系专业:电子信息工程年级: 2010级 姓名:学号:实验课程: VHDL数字系统设计 实验室号:__ 田C407 实验设备号: 07 实验时间: 11.12 指导教师签字:成绩: 实验一数控分频器的设计 1.实验目的和要求 学习数控分频器的设计、分析和测试方法。 2.实验原理 信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例1所示。 数控分频器的仿真波形如图1所示:输入不同的CLK频率和预置值D,给出如图1的时序波形。 100.0μs200.0μs300.0μs400.0μs 图1 当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns) 3.主要仪器设备(实验用的软硬件环境) 实验的硬件环境是: 微机一台 GW48 EDA实验开发系统一套 电源线一根 十芯JTAG口线一根 USB下载线一根 USB下载器一个 示波器 实验的软件环境是: Quartus II 9.0软件

4.操作方法与实验步骤 (1)创建工程,并命名位test。 (2)打开QuartusII,建立VHDL文件,并输入设计程序。保存为DVF. (3)选择目标器件。Acex1k—EP1K100QC208-3。 (4)启动编译。 (5)建立仿真波形图。 (6)仿真测试和波形分析。 (7)引脚锁定编译。 (8)编程下载。 (9)硬件测试 5.实验内容及实验数据记录 在实验系统上硬件验证例5-20的功能。可选实验电路模式1(第一章图4);键2/键1负责输入8位预置数D(PIO7-PIO0);CLK由clock0输入,频率选65536Hz 或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER)。编译下载后进行硬件测试:改变键2/键1的输入值,可听到不同音调的声音。 6.实验数据处理与分析 1)实验代码 【例1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DVF IS PORT ( CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT : OUT STD_LOGIC ); END; ARCHITECTURE one OF DVF IS SIGNAL FULL : STD_LOGIC; BEGIN P_REG: PROCESS(CLK) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK = '1' THEN IF CNT8 = "11111111" THEN CNT8 := D; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT8 FULL <= '1'; --同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; --否则继续作加1计数 FULL <= '0'; --且输出溢出标志信号FULL为低电平 END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULL'EVENT AND FULL = '1' THEN CNT2 := NOT CNT2; --如果溢出标志信号FULL为高电平,D触发器输出取反

VHDL实验报告一2选1多路选择器

实验一 实验目的: 熟悉quartus的vhdl文本设计流程全过程,学习简单的组合电路的设计,多层次的电路设计,仿真和硬件测试 二、实验内容 内容(一)用vhdl语言设计2选1多路选择器 参考例3-1程序设计如下: library ieee; use mux21a is port (a,b,s:in bit; y: out bit); end entity mux21a; architecture one of mux21a is begin y<=a when s='0' else b; end architecture one 全程编译后软件提示0错误,3警告,可以继续下面仿真操作。 程序分析: 这是一个2选1多路选择器,a和b分别为两个数字输入端的端口名,s为通道选择控制信号输入端的端口名,y为输出端的端口名。 时序仿真及分析: 时序仿真输入图: 时序仿真输出图: 时序分析: 由上面两图可以得知:当s=0时,y口输出a,当s=1时,y口输出b 下载和硬件测试: 引脚锁定图: 程序下载完成后,选择实验电路模式5,通过短路帽选择clock0接256Hz 信号,clock2接8Hz信号。通过键一控制s,当键一进行切换时,明显能听到扬声器发出两种不同音调的声音。 实验内容(二)双二选一多路选择器设计

程序设计: library ieee; use mux21a is port (a,b,s:in bit; y: out bit); end entity mux21a; architecture one of mux21a is begin y<=a when s='0' else b; end architecture one; entity muxk is port (a1,a2,a3,s0,s1:in bit; outy:out bit); end entity muxk; architecture bhv of muxk is component mux21a port (a,b,s:in bit; y:out bit); end component; signal tmp: bit; begin u1: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 bhv; 全程编译后软件提示0错误,2警告 程序分析: 这是一个双2选1多路选择器,a1、a2和a3分别为两个数字输入端的端口名,s0、s1为通道选择控制信号输入端的端口名,outy为输出端的端口名。实体mux21a是一个2选一选通电路,实体muxk是元件的例化,其作用是将两个mux21a组合成一个3选1多路选择器。 时序仿真及分析: 时序仿真输入图 时序仿真输出图 时序分析: 从仿真出来的结果,我们不难发现,s0和s1做为a1、a2、a3的选通控制信号。当s0=0.、s1=0时,outy输出a1;当s0=0.、s1=1时,outy输出a2;当s0=1.、s1=0时,outy输出a1;当s1=1.、s2=1时,outy输出a3; 下载和硬件测试: 引脚锁定图

VHDL实验报告

VHDL实验报告 5080309563 李斌 实验三.4位可逆计数器,4位可逆二进制代码-格雷码转换器设计 [设计思路及步骤]: 一.需求: 设计4位可逆计数器,及4位可逆二进制代码-格雷码转换器,并仿真,下载。 [具体要求] 1.4位可逆计数器 a)使用CLOCK_50作为输入时钟,其频率为50MHz(对于频率大于50Hz的闪烁, 人眼会看到连续的光),因而,对其进行225的分频后,再用于时钟控制。(可 利用实验一) b)使用拨码开关SW17作为模式控制,置‘1’时为加法计数器,置‘0’时为减 法计数器,同时使用LEDR17显示SW17的值。 c)使用KEY3作为异步复位开关(按下时为0,不按为1),当为加法计数器时, 置“0000”,当为减法计数器时,置“1111”。 d)使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高 位,LEDR0为低位。 2.4位可逆二进制代码――格雷码转换器 a)使用拨码开关SW17作为模式控制,置‘1’时为二进制代码―>格雷码转换, 置‘0’时为格雷码―>二进制代码,同时使用LEDR17显示SW17的值。 b)使用拨码开关SW3, SW2, SW1, SW0作为输入的被转换数,SW3为高位,SW0 为低位。 使用LEDR3,LEDR2,LEDR1,LEDR0作为转换后的输出结果显示,LEDR3为高位,LEDR0为低位。 二.变量解释: 4位可逆计数器: 1.clk为时钟输入,clkout为分频后的时钟,cnt为分频计数,ctr为SW17模式 控制,rst为KEY3异步复位开关,tem为输出结果的中间变量; 2.本实验的时钟输入为50MHz,定义为clk,为此设计时需要将其分频为50Hz, 需225分频,因此,代码中,需要有一个cnt作为一个225计数器,同时,定义 分频后的时钟为clkout; 3.建立process,检测key是否为0,为0则复位。否则,检测clkout,触发上升 沿则检测模式控制,对tem加1或减1,同时应检测是否达到最大或最小值, 达到最值则直接返回到最初值,否则继续操作; 4.最后,转换tem的值为相应的4位二进制数,并于LED上反映出来。 四位可逆二进制代码-格雷码转换器: 1.检测模式,进行相应的操作; 2.ctr为0则格雷码转换成二进制码;ctr为1则为二进制码转换为格雷码 [源代码]: 1)4位可逆计数器: library ieee; use ieee.std_logic_1164.all; entity cnt is

VHDL实验报告汇总

实验一4选一多路选择器 一:实验目的及实验环境 目的 1、熟悉ModelSim SE 6.5c的verilog 的文本设计流程,组合电路的设计、仿真和测试。 2、用verilog语言完成设计4选一多路选择器。 3、熟悉文本输入及仿真步骤。 4、初步了解可编程器件设计的全过程。 环境 1、P C 机一台 2、M odelSim SE 6.5c 二. 实验内容 1、用verilog语言完成设计4选一多路选择器, 2、用结构建模及数据流建模两种方法实现。 3、对于所设计的程序进行编译,检查纠错。 4、程序完善之后进行程序的仿真并进行波形的记录与分析 三.实验步骤 1、建立工程 2、添加文件到工程 3、编译文件 4、查看编译后的设计单元 5、将信号加入波形窗口 6、运行仿真 四.运行结果

五.总结 本次实验让我更加的熟悉modelsim使用方法,以及使用时应该注意的问题。在试验中也学习到了Verilog语法。在实验中我们应该注意verilog的格式要求,在用编程语言编程的时候,要自习留意语法标准,整理好逻辑思维的同时保证格式的正确。否则就会浪费大量的时间来完成实验。试验开始到结束这一过程中,我遇到了很多困难,后来都在同学的提醒和帮助下克服了。相信有了这次对这个语言和这个软件的接触,我们都有了更加深入的理解。 六.源代码 module mux41(a,b,c,d,s1,s0,out); input[1:0] a,b,c,d; input s1,s0; output[1:0] out; reg[1:0] out; always @(a or b or c or d or s 1 or s0) begin :mux41 case({s1,s0}) 2'b00: out<=a; 2'b01: out<=b; 2'b10: out<=c; 2'b11: out<=d; default: out=a; endcase end endmodule module sti; reg[1:0] a,b,c,d; reg s0,s1; wire[1:0] out; mux41 dtg(a,b,c,d,s0,s1,out); initial begin a=3'd0;b=3'd1;c=3'd2;d=3'd3; s0=0;s1=0; #100 a=3'd0;b=3'd1;c=3'd2;d= 3'd3;s0=0;s1=1; #100 a=3'd0;b=3'd1;c=3'd2;d= 3'd3;s0=1;s1=0; #100 a=3'd0;b=3'd1;c=3'd2;d= 3'd3;s0=1;s1=1; end endmodule

VHDL硬件描述语言实验报告

硬件描述语言实验附录 姓名:xxx 学号:xxx 指导教师:xxx 目录 硬件描述语言实验附录 (1) 实验1.三输入与门电路实验 (2) 实验2. 三—八译码器实验 (3) 实验3. D触发器实验 (4) 实验4. 分频器实验 (5) 实验5. 状态机实验 (8)

实验1.三输入与门电路实验 --三输入与门电路threeinput --姓名:王定 --学号:1306034248 --中北大学 LIBRARY IEEE; --调用库 USE IEEE.STD_LOGIC_1164.ALL;--库文件 -------------------------------------------------------------- ENTITY threeinput IS --定义实体名,其名称必须与VHDL文本文件名称相同PORT( A: IN STD_LOGIC; --输入端口,时钟输入 B: IN STD_LOGIC; --输入端口,个位写入使能 C: IN STD_LOGIC; --输入端口,十位写入使能 CO: OUT STD_LOGIC); --输出端口,溢出标志 END ENTITY threeinput; --结束端口定义 -------------------------------------------------------------- ARCHITECTURE RTL OF threeinput IS--定义结构体 BEGIN PROCESS(A,B,C) IS --开始,必须带上 BEGIN CO<=A AND B AND C ; END PROCESS; END ARCHITECTURE RTL; --结束结构体 表1. 三输入与门电路VHDL实验代码 图1. 三输入与门电路仿真波形图,A,B,C输入,CO输出

北邮数电VHDL实验报告

2009级数字电路实验报告 实验名称:EDA基础实验 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 【实验目的】 1.熟悉用QuartusII原理图输入法进行电路设计和仿真; 2.掌握QuartusII图形模块单元的生成与调用; 3.熟悉用VHDL语言设计组合逻辑电路和时序电路的方法; 4.熟悉用QuartusII文本输入法和图形输入法进行电路设计; 5.熟悉不同的编码及其之间的转换; 6.掌握触发器的逻辑功能及使用方法; 7.熟悉计数器、寄存器、锁存器、分频器、移位寄存器的设计方法 8.掌握VHDL语言的语法规范,掌握时序电路描述方法; 9.掌握多个数码管动态扫描显示的原理及设计方法。 【实验所用仪器及元器件】 1.计算机 2.直流稳压电源 3.数字系统与逻辑设计实验开发板 【实验内容】 1.用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。 2.用实验内容1中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功 能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信 号。

3.用3线-8线译码器(74LS138)和逻辑门设计实现函数F,仿真验证其功能,并下 载到实验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 4.用VHDL语言设计实现一个3位二进制数值比较器,仿真验证其功能,并下载到实 验板测试。要求用拨码开关设定输入信号,发光二极管显示输出信号。 5.用VHDL语言设计实现一个4选1的数据选择器;一个8421码转换为格雷码的代码 转换器;一个举重比赛裁判器;一个带同步置位和同步复位功能的D触发器;一个 带异步复位的4位二进制减计数器;一个带异步复位的8421码十进制计数器;一 个带异步复位的4位自启动环形计数器;一个带控制端的8位二进制寄存器,当控 制端为‘1’时,电路正常工作,否则输出为高阻态;一个分频系数为12,分频输 出信号占空比为50%的分频器。仿真验证其功能,并下载到实验板测试。要求用拨 码开关和按键开关设定输入信号,发光二极管显示输出信号。(注:有几个不需要 下载到实验板测试) 2.程序分析 全加器: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT(a,b:IN STD_LOGIC; co,so:OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE a OF h_adder IS BEGIN so<= a XOR b; co<= a AND b; END;

VHDL实验报告一2选1多路选择器

实验目的: 熟悉quartus的vhdl文本设计流程全过程,学习简单的组合电路的设计,多层次的电路设计,仿真和硬件测试 二、实验内容 内容(一)用vhdl语言设计2选1多路选择器 参考例3-1程序设计如下: library ieee; use mux21a is port (a,b,s:in bit; y: out bit); end entity mux21a; architecture one of mux21a is begin y<=a when s='0' else b; end architecture one 全程编译后软件提示0错误,3警告,可以继续下面仿真操作。 程序分析: 这是一个2选1多路选择器,a和b分别为两个数字输入端的端口名,s为通道选择控制信号输入端的端口名,y为输出端的端口名。 时序仿真及分析: 时序仿真输入图: 时序仿真输出图: 时序分析: 由上面两图可以得知:当s=0时,y口输出a,当s=1时,y口输出b 下载和硬件测试: 引脚锁定图: 程序下载完成后,选择实验电路模式5,通过短路帽选择clock0接256Hz 信号,clock2接8Hz信号。通过键一控制s,当键一进行切换时,明显能听到扬声器发出两种不同音调的声音。 实验内容(二)双二选一多路选择器设计 程序设计: library ieee;

use mux21a is port (a,b,s:in bit; y: out bit); end entity mux21a; architecture one of mux21a is begin y<=a when s='0' else b; end architecture one; entity muxk is port (a1,a2,a3,s0,s1:in bit; outy:out bit); end entity muxk; architecture bhv of muxk is component mux21a port (a,b,s:in bit; y:out bit); end component; signal tmp: bit; begin u1: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 bhv; 全程编译后软件提示0错误,2警告 程序分析: 这是一个双2选1多路选择器,a1、a2和a3分别为两个数字输入端的端口名,s0、s1为通道选择控制信号输入端的端口名,outy为输出端的端口名。实体mux21a是一个2选一选通电路,实体muxk是元件的例化,其作用是将两个mux21a组合成一个3选1多路选择器。 时序仿真及分析: 时序仿真输入图 时序仿真输出图 时序分析: 从仿真出来的结果,我们不难发现,s0和s1做为a1、a2、a3的选通控制信号。当s0=0.、s1=0时,outy输出a1;当s0=0.、s1=1时,outy输出a2;当s0=1.、s1=0时,outy输出a1;当s1=1.、s2=1时,outy输出a3; 下载和硬件测试: 引脚锁定图 程序下载完成后,选择实验电路模式5,通过短路帽选择clock0接256Hz

VHDL实验报告

实验者:黄成勇学号:3110008723 班级:电子(4)班日期:2012年12月30日 实验一:应用Quart us II 完成基本组合电路设计 (1) 实验目的:熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。 (2) 实验容1:首先利用QuartusⅡ完成2选1多路选择器的文本编辑输入(mux21a.vhd)和仿真测试等步骤,给出仿真波形。最后在实验系统上进行硬件测试,验证本项设计的功能。 2选1多路选择器: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = '0' THEN y <= a ; ELSE y <= b ;

END IF; END PROCESS; END ARCHITECTURE one ; 双2选1多路选择器 2选1多路选择器功能时序波形 (3) 实验容2:将此多路选择器看成是一个元件mux21a,利用元件例化语句。 例化程序: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY mux31a IS PORT ( a1, a2,a3, s0,s1: IN STD_LOGIC; outy : OUT STD_LOGIC );

VHDL第一次实验报告

VHDL第一次实验报告 深圳大学实验报告 课程名称:EDA技术 实验项目名称:基本电路行为的描述 学院:信息工程学院 专业:电子信息工程 指导教师: 报告人:学号:班级: 2 实验时间: 实验报告提交时间:2014年5月9日 教务部制 实验内容:1 多路选择器(习题2.1)2 ROM(习题3.4)3 简易加法器(习题3.5)4 通用译码器(习题4.4)5 第五章习题5.1、5.5、5.6、5.7、5.8 实验要求:1.依次完成各电路功能的VHDL代码编写 2.完成相应电路仿真,并对仿真结果截图,截图中要求尽可能多的体现不同输入信号对应的输入结果 3.完成实验报告,并按时提交至Blackboard,实验报告见实验报告模板,要求按模板各项内容完成。4.特别提示:实验报告按模板内容逐项填写,要求有完整的VHDL代码、仿真测试文件(VHDL test bench)、仿真结果截图、仿真结果分析、实验结论(或对实验的总结、心得体会)等内容。实验过程及内容:2.1 多路选择器多路选择器的顶层电路如图P2.1所示。根据真值表,如果输入sel=“01”或者sel=“10”,那么输出将等于对应的某一输入(c=a或c=b).然而如果输入sel=“00”或者sel=“11”,那么输出将分别为‘0’和‘Z’(高阻)。(a)填写表格,完成下

面的代码。(b)是对你的解答给出相关的注释。(c)将代码编译后进行仿真,验证其正确性。实验完整VHDL代码:library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mux is Port ( a : in STD_LOGIC_VECTOR(7 DOWNTO 0); b : in STD_LOGIC_VECTOR(7 DOWNTO 0); sel : in STD_LOGIC_VECTOR(1 DOWNTO 0); c : out STD_LOGIC_VECTOR(7 DOWNTO 0)); end mux; architecture example of mux is begin PROCESS (a,b,sel) begin IF (sel=\ c ‘U’); END IF; END PROCESS; end EXAMPLE; 仿真测试文件代码:LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY Test_Mux IS END Test_Mux; ARCHITECTURE behavior OF Test_Mux IS COMPONENT mux PORT( a : IN std_logic_vector(7 downto 0); b : IN std_logic_vector(7 downto 0); sel : IN std_logic_vector(1 downto 0); c : OUT std_logic_vector(7 downto 0) ); END COMPONENT; --Inputs signal a : std_logic_vector(7 downto 0) := (others => ‘0’); signal b : std_logic_vector(7 downto 0) := (others => ‘0’); signal sel : std_logic_vector(1 d ownto 0) := (others => ‘0’); --Outputs signal c : std_logic_vector(7 downto 0); -- No clocks detected in port list. Replace below with -- appropriate port name BEGIN -- Instantiate the Unit Under Test (UUT) uut: mux PORT MAP ( a => a, b => b, sel => sel, c => c ); -- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. a<=\ b<=\ sel <=\ wait for 100 ns; sel <=\ wait for 100 ns; sel <=\ wait for 100 ns; sel <=\ wait for 100 ns; -- insert stimulus here wait; end process; END; 仿真结果:如图,当输入信号sel为“00”时,输出信号c为“00000000”;当输入信号sel为“01”时,输出信号c等于a即为“10101010”;当输入信号sel为“10”时,输出信号c等于b即为“11110000”;当输入信号sel 为其他情况时,输出信号c等于自己设定的值,在此处即为“U”。习题3.4 ROM 试用1*1维常数来实现只读存储器ROM(read-only memory),假设一个ROM由许多深度为8,位宽为4的块组成。提示:首先建立一个名为rom的数组,然后定义一个rom类型的信号来实现ROM,用常数值填充到ROM块中:CONSTANT my_rom:rom:=(values);。实验完整VHDL代码:library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity ROM is Port ( addr :

VHDL乐曲演奏实验报告

文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。设计性实验报告 班级: 姓名(学号): 实验项目名称:乐曲演奏实验 实验项目性质:设计性 实验所属课程:EDA基础 实验室(中心): 指导教师: 实验完成时间:2009 年12 月13 日

教师评阅意见: 签名:年月日实验成绩: 一、实验目的 1、熟悉QuartusII 软件的使用。 2、熟悉EDA实验开发系统的基本使用。 3、学习VHDL基本单元电路的设计应用。进一步掌握EDA的多层次设计方法。 4、学习音乐发生器的设计。 二、实验内容及要求 1、实验内容 利用可编程逻辑器件FPGA,设计乐曲硬件电路,可自动演奏乐曲。 2、实验要求 要求能够演奏出《友谊天长地久》的曲调或可另选一段较完整的曲调(扩展要 求:能够从数码管上显示出当前曲调的简谱和频率),我们组演奏出的是实验 要求上的《友谊天长地久》曲调。 三、实验原理 1、乐曲硬件电路产生音乐是和音乐频率和音乐的持续时间有关;音符的持续时间需 根据乐曲的速度和每个音符的节拍数来确定。其简谱中音符和频率的关系如下: 2、该演奏电路演奏的乐曲是《友谊天长地久》片段,其最小的节拍为1拍,将1拍

的时长定位0.25S,则只需要再提供一个4hz的时钟频率即可产生1拍的时长,演奏的时间控制通过ROM查表的方式来完成。对于占用时间较长的节拍,(一定是节拍的整数倍),如全音符为4拍,2/4音符为2拍,1/4音符为1拍。 3、乐曲硬件演奏电路系统主要有数控分频器和乐曲存储模块两个部分组成,其余还有 音乐节拍发生器等等。数控分频器对FPGA 的基准频率进行分频,得到与各个音节对应的频率输出。乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中存放一个乐曲曲谱真值表(实验中用的ROM存储),由一个计数器来控制此真值表的输出,而由计数器的技术时钟信号作为乐曲节拍控制信号。 4、要求演奏时能循环进行,必须需另外设置一个时长计数器,当乐曲演奏完成时,保 证能自动从头开始演奏。该计数器控制真值表按顺序输出简谱。 四、实验仪器、材料 计算机一台、GW48 EDA/SOPC实验箱一台 QuartusII软件、实验箱连接线一根 五、方案设计 这个实验中采用层次化的设计思路,因此我们把此乐曲硬件演奏电路分为3个主要模块,即音乐发生器NoteTabs模块,音符译码电路Tonetaba模块,数控分频Speakera 模块。分好层次之后,编写每个模块的程序,分别生成项目符号,最后把生成的个项目符号用原理图的方式连接起来,然后编译、下载即可。由图例表示如下: 此实验设计中,我主要负责音乐发生器NoteTabs模块(ROM的定制过程)和最后的连接原理图部分。 六、实验过程及原始记录 1、音乐节拍发生器NoteTabs模块 这个模块用FPGA的片内ROM存放乐曲的简谱真值表,由一个二进制计数器为乐曲数据存储ROM的地址发生器随着NoteTabs中计数器按时钟频率做加法计数时,乐曲数据存储器ROM中的音符数据,将从ROM中的输出口输向音符译码电路Tonetaba ,所存储的乐曲就开始连续自然地演奏起来。

相关文档