ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-03 20:03:05  阅读:181  来源: 互联网

标签:begin end FPGA else VL29 信号 发生器 wave choise


题目描述:

请编写一个信号发生器模块,根据波形选择信号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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有