数制转换模块设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数制转换模块设计

---------------EDA电子综合设计

姓名:

班级:

学号:

指导老师:

时间:7月27日

一.设计目的

1)熟悉EDA环境下的复杂逻辑模块的设计方法、设计过程及其注意事项;

2)学习EDA软件Quartus-II的使用;

3)学习硬件描述语言VHDL/V erilog HDL并进行编程;

4)学习常用数制转换的基本原理(二-十进制数转换);

5)设计十-二进制数的转换模块。

二.设计原理

这个实验可分为三个模块,数据输入、数据传输和数据转换。按键控制数据的输入,按一次,输入一次数据。数据输入模块将16位的用8421BCD码所表示的十进制数分2次输入,输出14位用CPLD来完成。数据转换模块将14位BCD 码转换为二进制,从而实现十进制到二进制的转换,用LCD来显示。

三.VHDL/Verilog HDL语言编程

(1)输入程序及仿真结果

library ieee;

use ieee.std_logic_1164.all;

entity key_mode is

port(clk,rst,key_in:in std_logic;

key_en:out std_logic);

end key_mode;

architecture rtl of key_mode is

signal dQ:std_logic_vector(1 downto 0);

begin

key_en<=(not dQ(0)) and dQ(1);

process(clk,rst)

begin

if(rst='0') then

dQ<="00";

elsif(clk'event and clk='1') then

dQ<=dQ(0) & key_in;

end if;

end process;

end rtl;

(2)数据传输及仿真结果

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity mode_1 is

port(clk,rst,key_en:in std_logic;

data_in:in std_logic_vector(7 downto 0);

data_out:out std_logic_vector(15 downto 0);

en_out:out std_logic);

end mode_1;

architecture rtl of mode_1 is

signal data_tmp:std_logic_vector(15 downto 0); signal count_bit:std_logic_vector(1 downto 0); begin

data_out<=data_tmp;

en_out<=count_bit(1) and key_en;

aa:process(clk,rst)

begin

if(rst='0')then

count_bit<="00";

elsif(clk'event and clk='1')then

if(key_en='1')then

if(count_bit(1)='1')then

count_bit<="00";

else

count_bit<=count_bit +'1';

end if;

end if;

end if;

end process aa;

bb:process(clk,rst)

begin

if(rst='0')then

data_tmp<="0000000000000000";

elsif(clk'event and clk='1')then

if(key_en='1'and count_bit(1)='0')then

data_tmp<=data_tmp(7 downto 0)&data_in;

end if;

end if;

end process bb;

endrtl;

(3)数据转换程序及仿真结果

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity conv_mode is

port(clk,rst,conv_start:in std_logic;

data_in:in std_logic_vector(15 downto 0);

data_out:out std_logic_vector(13 downto 0);

conv_end:out std_logic );

end conv_mode;

architecture rtl of conv_mode is

signal data_tmp1,data_tmp2,data_tmp3,data_tmp4:std_logic_vector(13 downto 0); signal conv_en,conv_end1:std_logic;

signal cont_state:std_logic_vector(2 downto 0);

begin

conv_end<=conv_end1;

data_out<=data_tmp1;

conv_end1<=cont_state(2);

--conv_en_out<=conv_en;

a1:process(clk,rst)

begin

if(rst='0')then

cont_state<="000";

elsif(clk'event and clk='1')then

if(conv_end1='1')then

cont_state<="000";

elsif(conv_en='1')then

cont_state<=cont_state+'1';

else

cont_state<="000";

end if;

end if;

end process a1;

a2:process(clk,rst)

begin

if(rst='0')then

conv_en<='0';

elsif(clk'event and clk='1')then

if(conv_en='0' and conv_start='1')then

conv_en<='1';

elsif(conv_en='1' and conv_end1='1')then

conv_en<='0';

end if;

end if;

end process a2;

a3:process(clk,rst)

begin

if(rst='0')then

data_tmp1<="00000000000000";

data_tmp2<="00000000000000";

data_tmp3<="00000000000000";

data_tmp4<="00000000000000";

elsif(clk'event and clk='1')then

相关文档
最新文档