[問題] Verilog數位電路問題
各位先進好,
小弟想寫一個計算加速度量的電路,假設輸入一個加減速速度曲線,
希望能輸出其加速度量再乘上一個增益值
以下是電路:
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
推
04/29 04:03, , 1F
04/29 04:03, 1F
推
04/30 00:30, , 2F
04/30 00:30, 2F
→
04/30 00:31, , 3F
04/30 00:31, 3F