作者potatojerry (智)
看板Electronics
标题[问题] Verilog数位电路问题
时间Thu Apr 28 12:00:30 2011
各位先进好,
小弟想写一个计算加速度量的电路,假设输入一个加减速速度曲线,
希望能输出其加速度量再乘上一个增益值
以下是电路:
module Feedforward(clk_sam,cmd,FF_out);
input clk_sam;
input [5:0] cmd; //速度命令曲线输入
output [15:0] FF_out;
reg [5:0] cmd_reg;
reg [5:0] cmd_reg2;
reg [5:0] d;
parameter Gain=10; //Feedforward Gain
always@(posedge clk_sam)
begin
cmd_reg<=cmd; //储存此刻速度值
cmd_reg2<=cmd_reg; //储存上一刻速度值
end
always@(posedge clk_sam)
begin
if(cmd_reg>cmd_reg2)
d<=cmd_reg-cmd_reg2; //相减,类似微分效果
else
d<=~(cmd_reg-cmd_reg2)+1'b1;
end
assign FF_out=d*Gain; //输出量
endmodule
其 Testbench如下:
`timescale 1ns/100ps
module Feedforward_tb;
reg clk_sam;
reg [5:0] cmd;
wire [15:0] FF_out;
parameter per=1;
initial begin
clk_sam=0; cmd=0;
end
initial forever begin
#per clk_sam=!clk_sam;
end
initial begin
#20 cmd=1;
#20 cmd=2;
#20 cmd=3;
#20 cmd=4;
#20 cmd=5;
#20 cmd=6;
#20 cmd=7;
#20 cmd=8;
#20 cmd=9;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=10;
#20 cmd=9;
#20 cmd=8;
#20 cmd=7;
#20 cmd=6;
#20 cmd=5;
#20 cmd=4;
#20 cmd=3;
#20 cmd=2;
#20 cmd=1;
#20 cmd=0;
end
Feedforward FF(.clk_sam(clk_sam),.cmd(cmd),.FF_out(FF_out));
endmodule
这是目前的结果,由於Clk_sam 比斜率变化快上许多,所以会有这种情形
http://www.wretch.cc/album/show.php?i=memoryripple&b=5&f=1097749701&p=0
希望理想的波形能够如此
http://www.wretch.cc/album/show.php?i=memoryripple&b=5&f=1097749702&p=1
想请问该如何修正我的电路来符合目标呢? 或是有何建议? 实在相当感谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.243.66
1F:推 Pash77:1. clock 除频 2. counter 3. LPF(+sharp/pick/core) 04/29 04:03
2F:推 xanter:第一个想到也是除频 04/30 00:30
3F:→ xanter:1楼的1跟2其实原理上差不多...就看你怎麽用 04/30 00:31