[問題] Verilog數位電路問題

看板Electronics作者 (智)時間14年前 (2011/04/28 12:00), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
各位先進好, 小弟想寫一個計算加速度量的電路,假設輸入一個加減速速度曲線, 希望能輸出其加速度量再乘上一個增益值 以下是電路: 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
1. clock 除頻 2. counter 3. LPF(+sharp/pick/core)
04/29 04:03, 1F

04/30 00:30, , 2F
第一個想到也是除頻
04/30 00:30, 2F

04/30 00:31, , 3F
1樓的1跟2其實原理上差不多...就看你怎麼用
04/30 00:31, 3F
文章代碼(AID): #1DkEPXW7 (Electronics)