上面的视频是拨码开关控制数码管静态显示的,代码如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned;
entity sw_sm is
port(sw:in std_logic_vector(7 downto 0);
sm:out std_logic_vector(7 downto 0 ));
end entity sw_sm;
architecture behav of sw_sm is
begin
sm<="11000000" when sw="11111110" else
"11111001" when sw="11111101" else
"10100100" when sw="11111011" else
"10110000" when sw="11110111" else
"10011001" when sw="11101111" else
"10010010" when sw="11011111" else
"10000010" when sw="10111111" else
"11111000" when sw="01111111" else
"11111111";
end architecture behav;
在编写这个程序的时候注意到了:
if语句只是可以用于进程和子程序之中,而如上的条件信号赋值语句,则是可以用于进程之外的。。。。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned;
entity sw_sm is
port(sw:in std_logic_vector(7 downto 0);
sm:out std_logic_vector(7 downto 0 ));
end entity sw_sm;
architecture behav of sw_sm is
begin
sm<="11000000" when sw="11111110" else
"11111001" when sw="11111101" else
"10100100" when sw="11111011" else
"10110000" when sw="11110111" else
"10011001" when sw="11101111" else
"10010010" when sw="11011111" else
"10000010" when sw="10111111" else
"11111000" when sw="01111111" else
"11111111";
end architecture behav;
在编写这个程序的时候注意到了:
if语句只是可以用于进程和子程序之中,而如上的条件信号赋值语句,则是可以用于进程之外的。。。。
硬件电子琴的实现程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity music_bas is
port(clk:in std_logic;
key:in std_logic_vector(7 downto 0);
beep:out std_logic);
end entity music_bas;
architecture sound of music_bas is
signal a: integer range 25000 to 100000;--pinlv
signal count:integer range 0 to 100000 ;--fenpin
signal n: std_logic ;--qudongmaichong
begin
process(clk,key,a)
begin
if( clk'event and clk='1' )then
count <= count+1;
if(key="11111111")then
n<='0';
else
if (count=a)then
count <= 0;
n <= not n;
end if;
end if;
end if;
case key is
when"11111110"=>a<=95566;
when"11111101"=>a<=85121;
when"11111011"=>a<=75850;
when"11110111"=>a<=71592;
when"11101111"=>a<=63776;
when"11011111"=>a<=56818;
when"10111111"=>a<=50618;
--diyin
when"01111110"=>a<=47774;
when"01111101"=>a<=42568;
when"01111011"=>a<=37919;
when"01110111"=>a<=35791;
when"01101111"=>a<=31888;
when"01011111"=>a<=28409;
when"00111111"=>a<=25309;
--zhongyin
when others=>null;
end case;
beep <= n;
end process;
end architecture sound;
程序分析:将一定的频率脉冲输入到beep,即可发出不同频率的声音。a则是不同频率的的音调,count是用来计数分频的,n则是分频后的脉冲用来驱动蜂鸣器的。
遇到的问题:引脚的定义为什么是Y2呢?因为这个问题,一直下到板子上出不来效果的,今晚上偶尔修改了下子才发现是时钟引脚定义错了的,求大师指点啦。。。
这个的视频效果,明天传上来的。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity music_bas is
port(clk:in std_logic;
key:in std_logic_vector(7 downto 0);
beep:out std_logic);
end entity music_bas;
architecture sound of music_bas is
signal a: integer range 25000 to 100000;--pinlv
signal count:integer range 0 to 100000 ;--fenpin
signal n: std_logic ;--qudongmaichong
begin
process(clk,key,a)
begin
if( clk'event and clk='1' )then
count <= count+1;
if(key="11111111")then
n<='0';
else
if (count=a)then
count <= 0;
n <= not n;
end if;
end if;
end if;
case key is
when"11111110"=>a<=95566;
when"11111101"=>a<=85121;
when"11111011"=>a<=75850;
when"11110111"=>a<=71592;
when"11101111"=>a<=63776;
when"11011111"=>a<=56818;
when"10111111"=>a<=50618;
--diyin
when"01111110"=>a<=47774;
when"01111101"=>a<=42568;
when"01111011"=>a<=37919;
when"01110111"=>a<=35791;
when"01101111"=>a<=31888;
when"01011111"=>a<=28409;
when"00111111"=>a<=25309;
--zhongyin
when others=>null;
end case;
beep <= n;
end process;
end architecture sound;
程序分析:将一定的频率脉冲输入到beep,即可发出不同频率的声音。a则是不同频率的的音调,count是用来计数分频的,n则是分频后的脉冲用来驱动蜂鸣器的。
遇到的问题:引脚的定义为什么是Y2呢?因为这个问题,一直下到板子上出不来效果的,今晚上偶尔修改了下子才发现是时钟引脚定义错了的,求大师指点啦。。。
这个的视频效果,明天传上来的。
song_auto.rar
上面的链接是用VHDL实现的 硬件乐曲自动演奏 的功能。
从中学习到了层次化设计,这个程序花的时间比较多,也就是因为第一次接触层次化设计,刚开始的时候一点头绪都没有,甚至都没有弄明白层次化,以及要用到哪些模块,以及模块中是如何连接的,想了很长时间,其中也意识到了数电的重要性。
也在网上看了不少的资料,最后搞定了的,可能自己的程序中还有很多东西比较冗余,望大家多多指教。
下面简单介绍下各个模块的功能。
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |