EDA高手进来,帮忙用VHDL语言写一个方波信号发生器,要求实现调频和找空比调节功能。有完整论文更好

EDA高手进来,帮忙用VHDL语言写一个方波信号发生器,要求实现调频和找空比调节功能。有完整论文更好,第1张

你这个可以用模拟图实现的 无需写程序 给个参考你吧

本设计有5个模块组成,其中有:方波发生器,三角波发生器,正弦波发生器,阶梯波发生器,4选1选择器。下面是我设计的整个过程:

方波发生器:实质上是一段时间输出0,一段时间输出255的数字信号,当然这有8位的通道输出。

程序设计如下:

--工程名:方波发生器

--功能:产生方波,是通过交替送出全0和全1实现的,每32个时钟翻转一次

--时间:2010-12-17

library ieee

use ieee.std_logic_1164.all

use ieee.std_logic_unsigned.all

use ieee.std_logic_arith.all

entity sqaure is

port(clk,clr:in std_logic

q:out integer range 0 to 255

)

end entity

architecture behav of sqaure is

signal a:bit

begin

process(clk,clr) --计数分频

variable cnt:integer range 0 to 32

begin

if(clr='0') then

a<='0'

elsif clk'event and clk='1' then

if cnt<31 then --进行32分频

cnt:=cnt+1

else

cnt:=0

a<=not a

end if

end if

end process

process(clk,a) --信号输出

begin

if clk'event and clk='1' then

if a='1' then

q<=255

else

q<=0

end if

end if

end process

end behav

三角波发生器:实质上是先输出直线递增的数字信号,随后按照同样的斜率输出递减的数字信号。这样就能实现三角波的发生了。

程序设计如下:

--工程名:三角波信号发生器

--功能:产生的三角波以64个时钟为一个周期,输出q每次加减8。

--时间:2010-12-17

library ieee

use ieee.std_logic_1164.all

use ieee.std_logic_unsigned.all

use ieee.std_logic_arith.all

entity delta1 is

port(clk:in std_logic--时钟信号

rst:in std_logic--复位信号

q:out std_logic_vector(7 downto 0)) --输出信号

end entity

architecture behav of delta1 is

begin

process(clk,rst)

variable tmp:std_logic_vector(7 downto 0)

variable a:std_logic

begin

if(rst='0') then

tmp:="00000000"

elsif clk'event and clk='1' then

if(a='0') then

if(tmp="11111000") then --tmp=248

tmp:="11111111"

a:='1'--信号计数完成,下一次改成递减

else

tmp:=tmp+8--递增

end if

else

if tmp="00000111" then --tmp=7

tmp:="00000000"

a:='0'--信号计数完成,下一次改成递增

else

tmp:=tmp-8--递减

end if

end if

end if

q<=tmp--信号输出

end process

end behav

正弦波发生器:这里我设计了64个状态,就是将一个周期的正弦波分成64分,在然后一份份的数字信号输出就可以了。具体怎么取值,用excel计算就可以了。自己手动计算也可以的哦。

具体程序设计如下:

library ieee

use ieee.std_logic_1164.all

use ieee.std_logic_unsigned.all

use ieee.std_logic_arith.all

entity sin1 is

port(clk,clr:in std_logic

d:out integer range 0 to 255)

end entity

architecture behav of sin1 is

begin

process(clk,clr)

variable tmp:integer range 0 to 63

begin

if clr='0' then

d<=0

elsif clk'event and clk='1' then

if tmp=63 then

tmp:=0

else

tmp:=tmp+1

end if

case tmp is

when 00=>d<=255when 01=>d<=254when 02=>d<=252

when 03=>d<=249when 04=>d<=245when 05=>d<=239

when 06=>d<=233when 07=>d<=225when 08=>d<=217

when 09=>d<=207when 10=>d<=197when 11=>d<=186

when 12=>d<=174when 13=>d<=162when 14=>d<=150

when 15=>d<=137when 16=>d<=124when 17=>d<=112

when 18=>d<=99 when 19=>d<=87when 20=>d<=75

when 21=>d<=64 when 22=>d<=53when 23=>d<=43

when 24=>d<=34 when 25=>d<=26when 26=>d<=19

when 27=>d<=13 when 28=>d<=8 when 29=>d<=4

when 30=>d<=1 when 31=>d<=0 when 32=>d<=0

when 33=>d<=1 when 34=>d<=4 when 35=>d<=8

when 36=>d<=13 when 37=>d<=19when 38=>d<=26

when 39=>d<=34 when 40=>d<=43when 41=>d<=53

when 42=>d<=64 when 43=>d<=75when 44=>d<=87

when 45=>d<=99 when 46=>d<=112when 47=>d<=124

when 48=>d<=137when 49=>d<=150when 50=>d<=162

when 51=>d<=174when 52=>d<=186when 53=>d<=197

when 54=>d<=207when 55=>d<=217when 56=>d<=225

when 57=>d<=233when 58=>d<=239when 59=>d<=245

when 60=>d<=249when 61=>d<=252when 62=>d<=252

when 63=>d<=255

when others=>null

end case

end if

end process

end behav

下面是n分频器的VHDL描述,你只要将两个分频器串联起来就行了。第一个的分频系数为20MHz/10KHz=2000,第二个的分频系数为10KHz/1KHz=10,再将第一个分频器的输出通过一个D触发器构成的2分频器(将q_n输出端反馈至d输入端,输出端q即为输入端clk的2分频)即可。

library ieee

use ieee.std_logic_1164.all

use ieee.std_logic_unsigned.all

entity div is

generic(n:integer :=2000)

port (clk:in std_logic

q:out std_logic)

end div

architecture behave of div is

signal count :integer range n-1 downto 0:=n-1

begin

process(clk)

begin

if (clk'event and clk='1' and clk'last_value ='0') then

count<=count-1

if count>=n/2 then

q<='0'

else

q<='1'

end if

if count<=0 then

count<=n-1

end if

end if

end process

end behave

在计数器的基础上加上定时器,也就是说在单位时间内记的数就为频率。计数器输出信号经显示译码器(4511之类)就可以驱动LED。清零信号计数器一般自带。网上会有现成电路的

还有另一种方法:

能实现两位显示(00—99)的频率显示,能测正弦波,矩形波的频率; 能信号频率范围0-99hz,这些要求很简单。

正弦波用一个比较器就可以变成方波(矩形波),而且频率现在一般都可以做到1m以上了。

你试试,1楼的大师设计的也听不错的,你也看看


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11789102.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存