
上面的视频是拨码开关控制数码管静态显示的,代码如下:
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实现的 硬件乐曲自动演奏 的功能。
从中学习到了层次化设计,这个程序花的时间比较多,也就是因为第一次接触层次化设计,刚开始的时候一点头绪都没有,甚至都没有弄明白层次化,以及要用到哪些模块,以及模块中是如何连接的,想了很长时间,其中也意识到了数电的重要性。
也在网上看了不少的资料,最后搞定了的,可能自己的程序中还有很多东西比较冗余,望大家多多指教。
下面简单介绍下各个模块的功能。

回复
打赏帖 | |
---|---|
嵌入式LinuxC语言程序调试和宏使用技巧被打赏50分 | |
让代码中包含最新的编译时间信息被打赏50分 | |
rtthread硬件加密--2crc加密分析被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】mcxa156使用低功耗定时器适配硬件RTC框架被打赏26分 | |
【STM32F769】AI之与本地deepseek对接被打赏50分 | |
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 |