我想用verilog做一个单周期的方波 分别是20和10 下面是我写的代码 编译的时候没有问题 但是仿真的结果却不
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想用verilog做一个单周期的方波 分别是20和10 下面是我写的代码 编译的时候没有问题 但是仿真的结果却不相关的知识,希望对你有一定的参考价值。
always@(posedge F10MB)
if(! RESET)
begin
F500KB <= 0;
j <= 0;
end
else if(j==19)
begin
F500KB <= ~F500KB;
end
else if(j==29)
begin
j <= 0;
F500KB <= ~F500KB;
end
else
j <= j+1;
哪位高手帮我看看 谢谢了
你原来仿真的现象应该是当j==19时,F500KB发生翻转,以后就保持不变了。
原因就是j==19之后没有了加1操作。
下面是我的建议:
1.这个代码应该分成两段来写,代码清晰,而且可以提高工作频率。
2.对于多分支结构,一般采用case结构。这样可以提高工作频率,一般情况下也能节省逻辑资源。
reg[4:0]j;
always@(posedge F10MB)
if(! RESET)
j <= 5'd0;
else if(j==29)
j <= 5'd0;
else
j <= j+5'd1;
always@(posedge F10MB)
if(! RESET)
F500KB <= 0;
else
case(j)
5'd19:
F500KB <= ~F500KB;
5'd29:
F500KB <= ~F500KB;
default:;
endcase
另外不明白你的复位方式,是同步复位吗?建议看一下同步复位、异步复位及 异步复位、同步释放的区别
http://blog.ednchina.com/ilove314/201656/message.aspx 参考技术A module (clk,
clk2,
rst_2,
period);
input clk,clk2,rst_2;
output [9:0] period;
reg [9:0] period;
reg clk_1d;
reg cnt[9:0];
wire clk_pos;
always @ ( posedge clk2 or negedge rst_2 ) begin
if ( rst_2 == 1'b0 ) begin
clk_1d <= 1'b0;
end
else begin
clk_1d <= clk;
end
end
assign clk_pos = clk & (~clk_1d);
always @ ( posedge clk2 or negedge rst_2 ) begin
if ( rst_2 == 1'b0 ) begin
cnt[9:0] <= 10'd0;
end
else if ( clk_pos == 1'b1 ) begin
cnt[9:0] <= 10'd0;
end
else begin
cnt[9:0] <= cnt[9:0] + 10'd1;
end
end
always @ ( posedge clk2 or negedge rst_2 ) begin
if ( rst_2 == 1'b0 ) begin
period[9:0] <= 10'd0;
end
else if ( clk_pos == 1'b1 ) begin
period[9:0] <= cnt[9:0];
end
else begin
;
end
end
endmodule
补充说明:需要测量的时钟周期最多为追加的时钟频率的1024倍。
祝好,
Timothy 参考技术B always@(posedge F10MB)
if(! RESET)
begin
F500KB <= 0;
j <= 0;
end
else if(j==19)
begin
F500KB <= ~F500KB;
j <= j+1;
end
else if(j==29)
begin
j <= 0;
F500KB <= ~F500KB;
end
else
j <= j+1;
matlab实现可调节占空比的方波
我大概讲一下实现的原理:正弦波移相φ,当使得大于sin(φ)的值为1,其他值为-1,占空比就跟这个φ值之间有联系。
占空比原理图如下所示。
结果上图,可以实现调节占空比,方波频率,方波个数。
下面是函数的代码:
function y=squarewav(Vm,f,K,n) %参数为幅度,频率,占空比,以及波形个数 % 正弦信号 % f = 1000;% 正弦波频率 w = 2*pi*f;% 正弦波角频率 % Vm = 2;% 正弦幅值 u = (0.5-K)*pi;% 相位 N = 4000;% 调节采样率,采样率越大,波形误差越小 M = n*N; Fs = N*f;% 采样率:1/f_sameple为采样时间间隔,通常以N倍的信号源来表示 t = [0:M]/Fs;% 采样时间向量(始终采N个点,即刚好采信号源的一个周期) y_sin = Vm*sin(w*t+u); for i=1:M+1 if(y_sin(i)>=y_sin(1)) y_plus(i) = Vm; else y_plus(i) = -Vm; end end figure subplot(2,1,1) plot(t,y_sin,t,y_plus,\'r\',t,0,\'-\') subplot(2,1,2) ylim([-2.5 2.5]) plot(t,y_plus,\'r\',t,0,\'-\') ylim([-2.5 2.5])
以上是关于我想用verilog做一个单周期的方波 分别是20和10 下面是我写的代码 编译的时候没有问题 但是仿真的结果却不的主要内容,如果未能解决你的问题,请参考以下文章