文档详情

接口实验_VHDL编程_实验报告.doc

发布:2018-06-08约3.23千字共6页下载文档
文本预览下载声明
短学期 接口实验 VHDL编程 实验任务: 用VHDL编程实现十六进制的计数显示。并通过仿真或观察波形验证设计电路的正确性。最后在SE-5M型EDA实验开发系统上执行验证结果。 实验设备: SE-5M 型EDA实验开发系统,Maxplus 9.23 。 实验原理: 首先用MAxplus编写程序,然后进行编译,进行管叫设定,最后将程序下再到实验版的下载板上验证程序。 实验用到了以下管角: 时钟信号CP1(CP2): 进行时钟信号设定。总共有12个信号源,根据所需的时钟频率,跳线设置。 键盘扫描相应管角:Se-5M中有一个4X4的矩阵键盘,其连接图如下,键盘矩阵是与89C51和管理芯片(F7128)直接相连,而通过管理芯片键盘阵列实现了与CPLD间接相连,他是通过KEY来实现的。当CZ1的KEY置ON时,CPLD可与89C51的P1口相连或者键盘阵列相连,当CZ1D的KEY置OFF时,89C51的P1口及键盘阵列与CPLD断开。当CPLD和小键盘相连时H1-H4用于发出扫描信号,V1-V4为接收扫描信号,即H1-H4为输出管角,V1-V4为输入管角。 在具体在操作中,一个作为行扫描,一个作为列扫描,从而最终确定用户所按的键。 静态显示数码管M1-M2:用来选择最终的显示结果在哪一数码管上进行显示,例,要在最左边的那个数码管上显示结果,相应的值应该是,如果要所有的数码管都显示,相应的值就是。 动态显示数码管M3-M4: 用来将最终的结果显示在数码管上,由于要把每个数字或字母分成7段来显示,所以采用了动态扫描电路方式,将静态现实中的数码管M3,M4对应的8个I/O口用于动态显示的数码管的8个管,由于此处没用到小数点位dp,故总设它为0。关于7段的分发和具体对应的数字和字符,祥见下图和下表: A b c d e f g 0 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 2 1 1 0 1 1 0 1 3 1 1 1 1 0 0 1 4 0 1 1 0 0 1 1 5 1 0 1 1 0 1 1 6 0 0 1 1 1 1 1 7 1 1 1 0 0 0 0 8 1 1 1 1 1 1 1 9 1 1 1 1 0 1 1 A 1 1 1 0 1 1 1 B 0 0 1 1 1 1 1 C 1 0 0 1 1 1 0 D 1 1 1 1 1 0 1 E 1 0 0 1 1 1 1 F 1 0 0 1 1 1 1 编程思想: 首先要对输入输出数据进行定义,有两个4位的数组COL,ROW分别相对应输入的行和输出的列,从而最终可以确定用户所按得键。还有两个8位的数组OUT,SELE,分别对应最终的7段码的显示和那一个数码管负责显示。最后一个需要定义的就是时钟变量clk。 其次就是要进行键盘扫描,在具体在操作中,一个作为行扫描,一个作为列扫描,然后两者前后连接起来,作为一个8位长的数可以唯一确定用户所按得键。 最后就是根据上面这个数来确定7段码。 源程序: LIBRARY IEEE; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; ENTITY SCAN IS PORT (COL: IN std_logic_vector(3 downto 0); ROW: buffer std_logic_vector(3 downto 0); P_OUT : OUT std_logic_vector(7 DOWNTO 0); SELE : OUT std_logic_vector(7 downto 0); clk : in std_logic); END SCAN; ARCHITECTURE PRINT OF SCAN IS signal BUF: std_logic_VECTOR (7 DOWNTO 0); BEGIN P1: PROCESS(clk) BEGIN if (clkevent and clk=1) then case ROW is when 1110= ROW =1101; when 1101= ROW =1011; when 1011= ROW =0111; when others = ROW =1110; end case; end if; end process P1; P2: pr
显示全部
相似文档