4种实现方式完成
library ieee;
use ieee.std_logic_1164.all;
entity character_string is
port
(
clk : in std_logic;
char_en : buffer std_logic_vector(0 to 5);
seg_en : out std_logic_vector(0 to 7)
);
end entity;
滚动显示17位
architecture rtl_1 of character_string is
type string_of_integer is array (0 to 16) of integer range 0 to 15;
constant my_id : string_of_integer := (0,1,2,3,4,5,6,7,8,9,0,15,15,15,15,15,15);
type string_buffer is array (0 to 5) of integer range 0 to 15;
signal my_string_buffer : string_buffer := (15,15,15,15,15,15);
signal clk_slow : std_logic;
signal clk_fast : std_logic;
signal point_string : integer range 0 to 16; 指向17位字符串的指针
signal point_buffer : integer range 0 to 5; 指向缓冲区的指针
signal display_char : integer range 0 to 15; 要显示的数
signal clk_counter_slow : integer range 0 to 100; 计时器
signal clk_counter_fast : integer range 0 to 80000; 计时器
begin
process (clk_slow)
begin
if (rising_edge(clk_slow)) then 慢时钟来一个上升沿,动一位
if (point_string >= 16) then
point_string <= 0;
else
point_string <= point_string + 1;
end if;
end if;
end process;
process (clk_slow 一个一个往前数
begin
if (rising_edge(clk_slow)) then
my_string_buffer(5) <= my_id(point_string);
my_string_buffer(0 to 4) <= my_string_buffer(1 to 5);
end if;
end process;
process (clk_fast) 一个快时钟 调节一个缓冲区的指针
begin
if (rising_edge(clk_fast)) then
if (point_buffer >= 5) then
point_buffer <= 0;
else
point_buffer <= point_buffer + 1;
end if;
end if;
end process;
display_char <= my_string_buffer(point_buffer); 缓冲区指向的数显示
process (point_buffer)
begin
case point_buffer is
when 0 => char_en <= "011111";
when 1 => char_en <= "101111";
when 2 => char_en <= "110111";
when 3 => char_en <= "111011";
when 4 => char_en <= "111101";
when 5 => char_en <= "111110";
when others => char_en <= "011111";
end case;
end process;
process (display_char)
begin
case display_char is
when 0 => seg_en <= "00000011";
when 1 => seg_en <= "10011111";
when 2 => seg_en <= "00100101";
when 3 => seg_en <= "00001101";
when 4 => seg_en <= "10011001";
when 5 => seg_en <= "01001001";
when 6 => seg_en <= "01000001";
when 7 => seg_en <= "00011111";
when 8 => seg_en <= "00000001";
when 9 => seg_en <= "00001001";
when others => seg_en <= "11111111";
end case;
end process;
process (clk) 最快输入时钟/80000得到clk_fast
begin
if (rising_edge(clk)) then
if (clk_counter_fast >= 39999) then
clk_counter_fast <= 0;
clk_fast <= not clk_fast;
else
clk_counter_fast <= clk_counter_fast + 1;
end if;
end if;
end process;
process (clk_fast) clk_fast/200得到clk_slow
begin
if (rising_edge(clk_fast)) then
if (clk_counter_slow >= 99) then
clk_counter_slow <= 0;
clk_slow <= not clk_slow;
else
clk_counter_slow <= clk_counter_slow + 1;
end if;
end if;
end process;
end rtl_1;
architecture rtl_2 of character_string is
type string_of_integer is array (0 to 16) of integer range 0 to 15;
constant my_id : string_of_integer := (0,1,2,3,4,5,6,7,8,9,0,15,15,15,15,15,15);
type string_buffer is array (0 to 5) of integer range 0 to 15;
signal my_string_buffer : string_buffer := (15,15,15,15,15,15);
signal clk_slow : std_logic;
signal clk_fast : std_logic;
signal point_string : integer range 0 to 16;
signal point_buffer : integer range 0 to 5;
signal display_char : integer range 0 to 15;
signal clk_counter_slow : integer range 0 to 100;
signal clk_counter_fast : integer range 0 to 48000;
begin
process (clk_slow)
begin
if (rising_edge(clk_slow)) then
if (point_string >= 16) then
point_string <= 0;
else
point_string <= point_string + 1;
end if;
end if;
end process;
process (clk_slow)
begin
if (rising_edge(clk_slow)) then
for i in 0 to 5 loop
if (i + point_string) <= 16 then
my_string_buffer(i) <= my_id(i + point_string);
else
my_string_buffer(i) <= my_id(i + point_string - 17);
end if;
end loop;
end if;
end process;
process (clk_fast)
begin
if (rising_edge(clk_fast)) then
if (point_buffer >= 5) then
point_buffer <= 0;
else
point_buffer <= point_buffer + 1;
end if;
end if;
end process;
display_char <= my_string_buffer(point_buffer);
process (point_buffer)
begin
case point_buffer is
when 0 => char_en <= "011111";
when 1 => char_en <= "101111";
when 2 => char_en <= "110111";
when 3 => char_en <= "111011";
when 4 => char_en <= "111101";
when 5 => char_en <= "111110";
when others => char_en <= "011111";
end case;
end process;
process (display_char)
begin
case display_char is
when 0 => seg_en <= "00000011";
when 1 => seg_en <= "10011111";
when 2 => seg_en <= "00100101";
when 3 => seg_en <= "00001101";
when 4 => seg_en <= "10011001";
when 5 => seg_en <= "01001001";
when 6 => seg_en <= "01000001";
when 7 => seg_en <= "00011111";
when 8 => seg_en <= "00000001";
when 9 => seg_en <= "00001001";
when others => seg_en <= "11111111";
end case;
end process;
process (clk)
begin
if (rising_edge(clk)) then
if (clk_counter_fast >= 47999) then
clk_counter_fast <= 0;
clk_fast <= not clk_fast;
else
clk_counter_fast <= clk_counter_fast + 1;
end if;
end if;
end process;
process (clk_fast)
begin
if (rising_edge(clk_fast)) then
if (clk_counter_slow >= 99) then
clk_counter_slow <= 0;
clk_slow <= not clk_slow;
else
clk_counter_slow <= clk_counter_slow + 1;
end if;
end if;
end process;
end rtl_2;
architecture rtl_3 of character_string is
type string_of_integer is array (0 to 16) of integer range 0 to 15;
constant my_id : string_of_integer := (0,1,2,3,4,5,6,7,8,9,0,15,15,15,15,15,15);
type string_buffer is array (0 to 5) of integer range 0 to 15;
signal my_string_buffer : string_buffer := (15,15,15,15,15,15);
signal clk_slow : std_logic;
signal clk_fast : std_logic;
signal point_string : integer range 0 to 16;
signal display_char : integer range 0 to 15;
signal clk_counter_slow : integer range 0 to 100;
signal clk_counter_fast : integer range 0 to 24000;
begin
process (clk_slow)
begin
if (rising_edge(clk_slow)) then
if (point_string >= 16) then
point_string <= 0;
else
point_string <= point_string + 1;
end if;
end if;
end process;
process (clk_slow)
begin
if (rising_edge(clk_slow)) then
my_string_buffer(5) <= my_id(point_string);
my_string_buffer(0 to 4) <= my_string_buffer(1 to 5);
end if;
end process;
process (clk_fast)
begin
if (rising_edge(clk_fast)) then
case char_en is
when "011111" => char_en <= "101111";
when "101111" => char_en <= "110111";
when "110111" => char_en <= "111011";
when "111011" => char_en <= "111101";
when "111101" => char_en <= "111110";
when "111110" => char_en <= "011111";
when others => char_en <= "011111";
end case;
end if;
end process;
process (char_en)
begin
case char_en is
when "011111" => display_char <= my_string_buffer(0);
when "101111" => display_char <= my_string_buffer(1);
when "110111" => display_char <= my_string_buffer(2);
when "111011" => display_char <= my_string_buffer(3);
when "111101" => display_char <= my_string_buffer(4);
when "111110" => display_char <= my_string_buffer(5);
when others => display_char <= 15;
end case;
end process;
process (display_char)
begin
case display_char is
when 0 => seg_en <= "00000011";
when 1 => seg_en <= "10011111";
when 2 => seg_en <= "00100101";
when 3 => seg_en <= "00001101";
when 4
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
用VHDL写的数码管数字序列显示,内有源工程及代码注解 (113个子文件)
character_string.vpr.ammdb 407B
character_string.root_partition.cmp.ammdb 375B
character_string.map.ammdb 129B
character_string.vhd.bak 1KB
character_string.ace_cmp.bpm 744B
character_string.cmp.bpm 720B
character_string.map.bpm 686B
character_string.ace_cmp.cdb 21KB
character_string.cmp.cdb 14KB
character_string.root_partition.cmp.cdb 7KB
character_string.map.cdb 6KB
character_string.root_partition.map.cdb 6KB
character_string.sgdiff.cdb 5KB
character_string.(0).cnf.cdb 4KB
character_string.rtlv_sg.cdb 4KB
character_string.map_bb.cdb 2KB
character_string.root_partition.map.hbdb.cdb 1KB
character_string.root_partition.map.reg_db.cdb 230B
character_string.rtlv_sg_swap.cdb 204B
character_string.eco.cdb 164B
character_string.cdf 337B
logic_util_heursitic.dat 5KB
character_string.db_info 140B
character_string.db_info 140B
character_string.tiscmp.slow_1200mv_85c.ddb 121KB
character_string.tiscmp.slow_1200mv_0c.ddb 121KB
character_string.tiscmp.fast_1200mv_0c.ddb 120KB
character_string.asm_labs.ddb 10KB
character_string.tis_db_list.ddb 302B
character_string.pti_db_list.ddb 246B
character_string.root_partition.cmp.dfp 33B
character_string.done 26B
character_string.root_partition.map.dpi 647B
character_string.root_partition.map.hbdb.hb_info 46B
character_string.ace_cmp.hdb 14KB
character_string.cmp.hdb 12KB
character_string.root_partition.cmp.hdb 12KB
character_string.root_partition.map.hdb 12KB
character_string.map.hdb 12KB
character_string.root_partition.map.hbdb.hdb 11KB
character_string.sgdiff.hdb 11KB
character_string.pre_map.hdb 11KB
character_string.rtlv.hdb 11KB
character_string.map_bb.hdb 9KB
character_string.(0).cnf.hdb 1KB
character_string.hier_info 1KB
character_string.hif 383B
character_string.cuda_io_sim_cache.31um_ff_1200mv_0c_fast.hsd 380KB
character_string.cuda_io_sim_cache.31um_ss_1200mv_85c_slow.hsd 373KB
character_string.lpc.html 372B
character_string.cmp.idb 3KB
character_string.ipinfo 163B
character_string.jdi 235B
character_string.root_partition.map.kpt 803B
character_string.map.kpt 796B
character_string.cmp_merge.kpt 213B
.cmp.kpt 209B
character_string.cmp.logdb 12KB
character_string.root_partition.cmp.logdb 4B
character_string.map_bb.logdb 4B
character_string.map.logdb 4B
character_string.sgate.nvd 14KB
character_string.sgate_sm.nvd 249B
character_string.pin 30KB
character_string.fit.qmsg 19KB
character_string.sta.qmsg 18KB
character_string.map.qmsg 6KB
character_string.eda.qmsg 5KB
prev_cmp_character_string.qmsg 5KB
character_string.asm.qmsg 2KB
character_string.npp.qmsg 2KB
character_string.qpf 1KB
character_string.qsf 4KB
character_string.qws 746B
character_string.root_partition.cmp.rcfdb 6KB
character_string.sta.rdb 27KB
character_string.cmp.rdb 20KB
character_string.routing.rdb 5KB
character_string.asm.rdb 1KB
character_string.map.rdb 1KB
character_string.lpc.rdb 400B
character_string.pplq.rdb 296B
README 653B
character_string.sta.rpt 228KB
character_string.fit.rpt 140KB
character_string.map.rpt 21KB
character_string.flow.rpt 9KB
character_string.eda.rpt 7KB
character_string.asm.rpt 7KB
character_string.sld_design_entry_dsc.sci 279B
character_string.sld_design_entry.sci 279B
character_string_8_1200mv_85c_vhd_slow.sdo 39KB
character_string_vhd.sdo 39KB
character_string_8_1200mv_0c_vhd_slow.sdo 39KB
character_string_min_1200mv_0c_vhd_fast.sdo 38KB
character_string.sft 407B
character_string.root_partition.map.hbdb.sig 32B
character_string.fit.smsg 703B
character_string.sof 485KB
character_string.sta.summary 2KB
共 113 条
- 1
- 2
资源评论
princrss_zt
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功