数制转换模块设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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