搞个笑?用Verilog产生一个三角波吧!
【摘要】 写了这么一个幼儿级别的程序,描述一个三角波的Verilog产生办法,至于三角波的周期没有进行可调性设计,仅仅是为了测试而用,如果需要某个频率的三角波,可以自己调节代码。
本不想放上面的,但是也不舍得扔,就搞个笑吧。
`timescale 1ns / 1ps module Triangle_Wave_Gen( input clk, input rst_n, outpu...
写了这么一个幼儿级别的程序,描述一个三角波的Verilog产生办法,至于三角波的周期没有进行可调性设计,仅仅是为了测试而用,如果需要某个频率的三角波,可以自己调节代码。
本不想放上面的,但是也不舍得扔,就搞个笑吧。
-
`timescale 1ns / 1ps
-
-
-
module Triangle_Wave_Gen(
-
-
input clk,
-
input rst_n,
-
-
output reg signed [15:0] wave_out,
-
output signed [15:0] triangle_wave_out
-
);
-
-
reg [3:0] count;
-
-
-
always@(posedge clk or negedge rst_n) begin
-
if(!rst_n) begin
-
count <= 0;
-
end
-
else if(count == 11) begin
-
count <= 0;
-
end
-
else count <= count + 1;
-
-
end
-
-
always@(posedge clk or negedge rst_n) begin
-
if(!rst_n) wave_out <= 0;
-
else if( count <= 5) wave_out <= wave_out + 100;
-
else wave_out <= wave_out - 100;
-
-
end
-
-
assign triangle_wave_out = wave_out - 300;
-
-
-
-
-
-
-
endmodule
对这个波形产生函数进行仿真:
-
`timescale 1ns / 1ps
-
-
-
-
module Triangle_Wave_Gen_tb(
-
-
);
-
-
reg clk;
-
reg rst_n;
-
-
wire [15:0] wave_out;
-
wire [15:0] triangle_wave_out;
-
-
initial begin
-
clk = 0;
-
forever
-
#20 clk = ~clk;
-
-
end
-
-
-
initial begin
-
rst_n = 0;
-
-
#100
-
rst_n = 1;
-
end
-
-
Triangle_Wave_Gen u_Triangle_Wave_Gen(
-
.clk(clk),
-
.rst_n(rst_n),
-
.wave_out(wave_out),
-
.triangle_wave_out(triangle_wave_out)
-
-
);
-
-
-
-
-
-
endmodule
想必你一定知道,设计程序中的triangle_wave_out变量为什么在wave_out的基础上减去300,仅仅是为了让三角波的最大值以及最小值对称。
虽然说很简单,但至少很清晰。
如果要测试你做的一个FFT或者什么变换设计,对不对,不妨设计一个简单的三角波作为输入数据进行测试,而这个三角波,何苦费心呢?就这样随便写一个吧。
最后说说,如何模拟的方式显示这个三角波:
右击波形名字,选择波形样式即可,但是还需要设置下模拟波形:
让Y的范围包含你的波形的范围。
当然,高级的也有,参考别人的博文:任意波形产生,我没看。
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/95379872
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)