周仕成_5080309600_VHDL实验报告_第1页
周仕成_5080309600_VHDL实验报告_第2页
周仕成_5080309600_VHDL实验报告_第3页
周仕成_5080309600_VHDL实验报告_第4页
周仕成_5080309600_VHDL实验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、F0803017 周仕成 5080309600VHDL 实验报告F0803017 周仕成5080309600目录实验三.4 位可逆计数器,4 位可逆二进制代码格雷码转换器设计2实验六. 序列检测器的设计5实验七. 基于 ROM 的正弦波发生器的设计8实验八. 数字密码锁的设计与实现131F0803017 周仕成 5080309600实验三.4 位可逆计数器,4 位可逆二进制代码格雷码转换器设计设计思路及步骤:1) 4 位可逆计数器:1. 定义各个量:clk 为时钟输入(50MHz),clkdiv 为分频后的时钟,count 为分频计数,mode 为 SW17 模式控制,rst 为 KEY3 异

2、步复位开关;2. 本实验的时钟输入为 50MHz,定义为 clk,为此设计时需要将其分频为 50Hz,需 225 分频,因此,代码中,需要有一个 count 作为一个 225 计数器,同时,定义分频后的时钟为 clk_div;3. 在主程序中,count 从 0 计数到 224-1,检测时钟输入 clk,在 clk 触发上升沿时,使 count 加 1,当 count 为 224-1 时,clkout 作一次 not 变换,如此便达到分频的目的。4. 分频结束后,需要在另一个 process 中,首先检测是否异步复位开关 key 为 0,叵为 0,则复位。否则,检测 clk_div,当其触发上

3、升沿时,检测模式控制,按模式控制,对 num 加 1 或减 1;2) 4 位可逆二进制代码-格雷码转换器:1 各量的定义 :SW(17) 为 SW17 模式控制, SW3-SW0 为拨码开关输入,LEDR3-LEDR0为转换值的输出;2 检测模式输入,按模式输入值进入各自的 when 语句,相应的输入对应相应的输出。源代码:4 位可逆计数器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter ISPORT(clk:

4、 INSTD_LOGIC;mode: INSTD_LOGIC;LEDR: OUT STD_LOGIC_VECTOR(17 DOWNTO 0);rst: INSTD_LOGIC);END counter;ARCHITECTURE rtl OF counter ISSIGNAL count: STD_LOGIC_VECTOR(24 DOWNTO 0);SIGNAL clk_div : STD_LOGIC;SIGNAL num: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINclk_div = count(24);LEDR(3) = num(3);LEDR(2) = num(2

5、);2F0803017 周仕成 5080309600LEDR(1) = num(1);LEDR(0) = num(0);PROCESS(clk,count,rst)BEGINIF (rst=0)THEN count=0000000000000000000000000;ELSEIF (clk event AND clk=1) THENIF(count=1111111111111111111111111) THENcount 0);ELSEcount = count+1;END IF ;END IF ;END IF;END PROCESS;PROCESS(clk_div,num,rst)BEGIN

6、IF (rst=0 AND mode=1) THENnum=0000;ELSIF (rst=0 AND mode=0) THENnum=1111;ELSEIF (clk_div event AND clk_div=1)THEN IF (mode=1)THENLEDR(17)=1;num=num+1;ELSELEDR(17)=0;num=num-1;END IF;END IF;END IF;END PROCESS;END rtl;4 位可逆二进制代码-格雷码转换器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.

7、ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY graycode ISPORT(SW :INSTD_LOGIC_VECTOR(17 DOWNTO 0);LEDR: OUT STD_LOGIC_VECTOR(3DOWNTO 0);END graycode;3F0803017 周仕成 5080309600ARCHITECTURE rtl OF graycode ISSIGNAL graycode : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL binary: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL i

8、nput: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINinput(0)=SW(0);input(1)=SW(1);input(2)=SW(2);input(3)=SW(3);graycode =0000 WHEN INPUT=0000 ELSE0001 WHEN INPUT=0001 ELSE0011 WHEN INPUT=0010 ELSE0010 WHEN INPUT=0011 ELSE0110 WHEN INPUT=0100 ELSE0111 WHEN INPUT=0101 ELSE0101 WHEN INPUT=0110 ELSE0100 WHEN INPUT

9、=0111 ELSE1100 WHEN INPUT=1000 ELSE1101 WHEN INPUT=1001 ELSE1111 WHEN INPUT=1010 ELSE1110 WHEN INPUT=1011 ELSE1010 WHEN INPUT=1100 ELSE1011 WHEN INPUT=1101 ELSE1001 WHEN INPUT=1110 ELSE1000 WHEN INPUT=1111;BINARYLEDRLEDR sm=0;if din=1 thenstate=s1;5F0803017 周仕成 5080309600elsestate sm=0;if din=0 then

10、state=s2;elsestate sm=0;if din=1 thenstate=s3;elsestate sm=0;if din=1 thenstate=s4;elsestate sm=0;if din=0 thenstate=s5;elsestate sm=1;if din=1 then6F0803017 周仕成 5080309600state=s3;elsestate=s0;end if;end case;end if;end process;end;仿真结果:实验心得:这次的实验,如果对状态图掌握的好的话还是比较容易的,由于比较生疏,开始状态图并不对,后来在助教老师的提示下修改正确

11、,加深了对状态机的理解。7F0803017 周仕成 5080309600实验七. 基于 ROM 的正弦波发生器的设计设计思路及步骤:1. 原理图:波形数据存储模块(rom)波形发生器控制模块CLK输出锁存模块2. 由于地址宽度为 6,最多存 64 个数据,因此,在一个周期 2 内,等间隔取 64 个采样点;同时,由于数据的宽度为 8,因此数据值的范围可以为 0 到 256,使用 MATLAB 得到这 64 个波形数据,如下:10000000,10001101,10011001,10100101,10110001,10111100,11000111,11010001,11011011,11100

12、011,11101010,11110001,11110110,11111010,11111110,11111111,11111111,11111111,11111110,11111010,11110110,11110001,11101010,11100011,11011011,11010001,11000111,10111100,10110001,10100101,10011001,10001101,10000000,01110011,01100111,01011011,01001111,01000100,00111001,00101111,00100101,00011101,00010110

13、,00001111,00001010,00000110,00000010,00000001,00000000,00000001,00000010,00000110,00001010,00001111,00010110,00011101,00100101,00101111,00111001,01000100,01001111,01011011,01100111,011100113. 定义各量: data 为数据输入,clk 为时钟输入,wave 为波形值的最终输出,count为计数器,memory 为 64 个采样点的存储;4. 首先,先将 64 个采样点存储在 memory 中,程序开始,检测

14、时钟输入 clk,若触发上升沿,检测 count 的值,将相应的 count 从 063 对应的 memory 从 memory0-memory63,用 case 语句关联它们的关系,同时,count 加 1;5. 由此,在仿真时设定相应的时钟参数,便可得到相应的波形输出。源代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ROM ISGENERIC (BITS: INTEGER :=8;WORDS: INTEGER := 64);PORT (ADDR : BUFFER INTEGER RANGE 0 TO WORDS-1;DATA: BUF

15、FER STD_LOGIC_VECTOR(BITS-1 DOWNTO 0);CLK : IN BIT;WAVE: BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END ROM;ARCHITECTURE ROM OF ROM ISTYPE VECTOR_ARRAY IS ARRAY(0 TO WORDS-1) OFSTD_LOGIC_VECTOR (BITS-1 DOWNTO 0);SIGNAL COUNT: INTEGER RANGE 0 TO 63;8F0803017 周仕成 5080309600CONSTANT MEMORY: VECTOR_ARRAY :=(10

16、000000,10001101,10011001,10100101,10110001,10111100,11000111,11010001,11011011,11100011,11101010,11110001,11110110,11111010,11111110,11111111,11111111,11111111,11111110,11111010,11110110,11110001,11101010,11100011,11011011,11010001,11000111,10111100,10110001,10100101,10011001,10001101,10000000,01110

17、011,01100111,01011011,01001111,01000100,00111001,00101111,00100101,00011101,00010110,9F0803017 周仕成 508030960000001111,00001010,00000110,00000010,00000001,00000000,00000001,00000010,00000110,00001010,00001111,00010110,00011101,00100101,00101111,00111001,01000100,01001111,01011011,01100111,01110011);b

18、eginPROCESSBEGIN-data WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAV

19、E WAVE WAVE WAVE WAVE WAVE WAVE WAVE WAVE = MEMORY(63);END CASE;COUNT=COUNT+1;END PROCESS;end rom;仿真结果:实验心得:本次实验同样比较简单,通过做这次本次实验,使我了解了基于 ROM 的正弦波发生器的设计,并且,通过实验加深了对 VHDL 实现波形发生器的理解与认识。12F0803017 周仕成 5080309600实验八. 数字密码锁的设计与实现设计思路及步骤:1. 各量定义:input_code 为拨码开关的密码输入,clk 为时钟输入,open_lock 为开锁信号,close_lock 为

20、关锁信号,set 为修改密码信号,rst 为复位信号,dispred 和 dispgreen 分别为红灯和绿灯输出;2. 首先,本实验按异步复位处理,检测复位信号 rst,若为 0,则复位密码置为 00000001,否则,若 set 为 0,密码为当前输入;3. 组合逻辑部分:通过 process 敏感列表,检测 rst,input_code,open_lock,close_lock。若密码正确,亮绿灯,灭红灯,若 open 为 0,则将输入的密码与存储的密码对比,若相等,开锁成功,反之失败;若密码错误,则要红灯灭,绿灯亮,此状态下可修改密码或者关锁,若 close 为 0,则关锁;若 cha

21、nge 为 0,则取得拨码开关的值作为新的密码。4. 由此,可得最终结果。源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity codelock isport( input_code: in std_logic_vector(7 downto 0);rst,open_lock,close_lock,set: in std_logic;dispred,dispgreen: out std_logic);end codelock;architecture codelock_body of codelock issignal code: std_logic_vector(7 downto 0):= 00000001;signal setcode_flag: s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论