[問題] verilog的問題Orz
小弟目前在做積分器與微分器。
餵入的資料為: IN_A,IN_B,IN_C,IN_D,SHIFT,IN_X1,IN_X2,MODE
餵出資料:OUT
基本上積分器微分器有四個選擇依SHIFT為定,其四種選擇指示其方程式的係數前後有別
ex: A B C D , B C D A , C D A B , D A B C [未知數x我就省略了]
依給定的SHIFT進入特定的一個選擇後再依給定的MODE執行積分器或者微分器。
IN_A,...,IN_D為方程式的係數,IN_X1,IN_X2為上下限,積分微分的方程式都以固定。
主要分兩個module : 1. PID.v
2. integral_diff.v
//PID.v
`include "integral_diff.v"
module PID(OUT,IN_A,IN_B,IN_C,IN_D,SHIFT,IN_X1,IN_X2,MODE);
input MODE;
input signed [4:0] IN_A,IN_B,IN_C,IN_D,IN_X1,IN_X2;
input [4:0] SHIFT;
output signed [31:0] OUT;
wire signed [19:0] ADD;
assign ADD[19:15]=IN_A[4:0];
assign ADD[14:10]=IN_B[4:0];
assign ADD[9:5]=IN_C[4:0];
assign ADD[4:0]=IN_D[4:0];
integral_diff
result(OUT[31:0],ADD[19:0],SHIFT[4:0],IN_X1[4:0],IN_X2[4:0],MODE);
endmodule
//主要宣告一個wire ADD來裝進來的係數A,B,C,D再用shift的功能去移動係數
//integral_diff.v
module integral_diff(OUT,ADD_NEW,SHIFT,X1,X2,MO);
input MO;
input signed [4:0] X1,X2;
input [4:0] SHIFT;
input signed [19:0] ADD_NEW;
output signed [31:0] OUT;
reg signed [4:0] A,B,C,D;
reg signed [19:0] TEMP;
reg signed [31:0] TEMP1;
reg signed [31:0] TEMP2;
reg signed [31:0] OUT;
wire [1:0]coef;
assign coef={SHIFT[1],SHIFT[0]};
always@(*)
begin
if(coef==2'b00)
begin
if(MO==1'b0)
begin
TEMP = ADD_NEW ;
A[4:0]=TEMP[19:15];
B[4:0]=TEMP[14:10];
C[4:0]=TEMP[9:5];
D[4:0]=TEMP[4:0];
TEMP1 = 25*A*(X2*X2*X2*X2 - X1*X1*X1*X1);
TEMP1 = TEMP1 >> 2;
TEMP2 = 5*C*(X2*X2-X1*X1) ;
TEMP2 = TEMP2 >> 1;
OUT = TEMP1 + TEMP2 + D*(X2-X1);
end
else
begin
TEMP = ADD_NEW ;
A[4:0]=TEMP[19:15];
B[4:0]=TEMP[14:10];
C[4:0]=TEMP[9:5];
D[4:0]=TEMP[4:0];
OUT = 3*A*X2*X2 + 2*B*X2 + C;
end
end
else if(coef==2'b01)
begin
if(MO==1'b0)
begin
D[4:0]=ADD_NEW[19:15];
TEMP = ADD_NEW << 5;
A[4:0]=TEMP[19:15];
B[4:0]=TEMP[14:10];
C[4:0]=TEMP[9:5];
TEMP1 = 0;
TEMP1 = 25*A*(X2*X2*X2*X2 - X1*X1*X1*X1);
TEMP1=TEMP1 >> 2;
TEMP2 = 5*C*(X2*X2-X1*X1);
TEMP2=TEMP2 >> 1;
OUT = TEMP1 + TEMP2 + D*(X2-X1);
end
else
begin
D[4:0]=ADD_NEW[19:15];
TEMP = ADD_NEW << 5;
A[4:0]=TEMP[19:15];
B[4:0]=TEMP[14:10];
C[4:0]=TEMP[9:5];
OUT = 3*A*X2*X2 + 2*B*X2 + C;
end
......以下略
我沒demo過,後來我用nWave去檢查各各參數,我發現係數都對,shift後的數值
都有裝到應該有的reg,但temp1,temp2,out都錯
我把temp1 = 0 ; nWave還是跑出707200(十進位)不管我怎麼更改temp1的形式
都一樣式707200..原本我把計算都寫成一行,但學長說分開處理看看...
但還是不行...只好求助各位大大了QQ
熱心者小弟捐獻1000p幣..
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.234.185
推
08/26 21:36, , 1F
08/26 21:36, 1F
→
08/26 21:36, , 2F
08/26 21:36, 2F
→
08/26 21:37, , 3F
08/26 21:37, 3F
推
08/26 21:40, , 4F
08/26 21:40, 4F
推
08/26 21:42, , 5F
08/26 21:42, 5F
→
08/26 21:42, , 6F
08/26 21:42, 6F
→
08/26 21:57, , 7F
08/26 21:57, 7F
推
08/26 22:01, , 8F
08/26 22:01, 8F
→
08/26 22:01, , 9F
08/26 22:01, 9F
→
08/26 22:02, , 10F
08/26 22:02, 10F
→
08/26 22:02, , 11F
08/26 22:02, 11F
推
08/26 22:08, , 12F
08/26 22:08, 12F
→
08/26 22:09, , 13F
08/26 22:09, 13F
推
08/27 00:26, , 14F
08/27 00:26, 14F
→
09/05 22:58, , 15F
09/05 22:58, 15F
→
09/05 22:59, , 16F
09/05 22:59, 16F
→
09/05 23:03, , 17F
09/05 23:03, 17F
→
09/05 23:05, , 18F
09/05 23:05, 18F
→
08/13 19:15, , 19F
08/13 19:15, 19F
→
09/17 23:09, , 20F
09/17 23:09, 20F