其他分享
首页 > 其他分享> > 【FPGA学习笔记】VL29 信号发生器

【FPGA学习笔记】VL29 信号发生器

作者:互联网

题目描述:

请编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形:wave_choice=0时,发出方波信号;wave_choice=1时,发出锯齿波信号;wave_choice=2时,发出三角波信号。

       模块的接口信号图如下

 

 

 

 

       模块的时序图如下:

 

 


请使用Verilog HDL实现以上功能,并编写testbench验证模块的功能  

输入描述:

clk:系统时钟信号 rst_n:异步复位信号,低电平有效 wave_choise:2比特位宽的信号,根据该信号的取值不同,输出不同的波形信号  

输出描述:

wave:5比特位宽的信号,根据wave_choise的值,输出不同波形的信号 答:

1.方波周期必须是20,占空比50%。用计数器实现时,幅值在计数为0-9时取0,10-19时取20。如果计数1-10时取0,11-19-0时取20,会出错,因为第一个周期持续时间不对。

2.锯齿波周期必须21,最大幅度20。切换波形模式时,直接递增wave(不用从头开始增加wave),直到幅度为20,再从头开始。

3.三角波周期必须40,最大幅度20。切换波形模式时,wave默认递减,除非进入三角波模式时wave=0,

代码如下:

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 `timescale 1ns/1ns /*题目描述: 请编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形: wave_choice=0时,发出方波信号; wave_choice=1时,发出锯齿波信号; wave_choice=2时,发出三角波信号。 */ module signal_generator(     input clk,     input rst_n,     input [1:0] wave_choise,     output reg [4:0]wave     );       reg [4:0] cnt;     reg flag;       always @(posedge clk or negedge rst_n)     begin         if (!rst_n)             cnt<=0;         else         begin             if (wave_choise==0)             begin                 if (cnt>=19)                     cnt<=0;                 else                     cnt<=cnt+1;             end             else                 cnt<=0;         end     end       always @(posedge clk or negedge rst_n)     begin         if (!rst_n)             flag<=1;         else         begin             if (wave_choise==2)             begin                 if (wave==19)                     flag<=1;                 else if (wave==1)                     flag<=0;                 else                     flag<=flag;             end             else             begin                 if (wave==0)                     flag<=0;                 else                     flag<=1;             end         end     end       always @(posedge clk or negedge rst_n)     begin         if (!rst_n)             wave<=0;         else         begin             if (wave_choise==0)             begin                 wave <= cnt<9?    0     :                                 cnt<19?20:0;             end             else if (wave_choise==1)             begin                 wave <= wave>=200     : wave+1;             end             else if (wave_choise==2)             begin                 wave <= flag==1 ? wave-1: wave+1;             end             else                 wave<=0;         end     end       endmodule

标签:begin,end,FPGA,else,VL29,信号,发生器,wave,choise
来源: https://www.cnblogs.com/mahaidong/p/16440706.html