作者psw (ICK)
看板Electronics
標題[問題] Quartus_verilog 為什麼輸出的波型是錯的
時間Fri Apr 9 20:00:12 2010
各位大哥
可不可以幫小弟看一下這個程式碼,為什麼出輸波型是錯的?
小弟我找了好久也找不出來..XD
這程式的義意是我要算1- (2*|x-a|/b)
但這不可能在verilog上run所以全乘512
得512-(1024*|x-a|/b)
^^^^^^^^^^^^^^^^^^^^^^^^ 這程式主要是要算這個 ^^
幫小弟解答出來的二百P幣 ^^
<(_ _)>
----
這個
input的
a是亂數
b是亂數的2的次方數
x是亂數
而在輸出時的m是錯的
out_bi也是錯的
ps. out_bi是取b的次方數
ex:
input ==> a=19,b=16,x=21時;
out ==> out_bi=3,m=0; (錯誤了)
應該====> out_bi=4,m=320;(正確的)
-------------
//以下為程式碼;
module modtest(
input clock,
input [4:0] x,
input [4:0] a,b,
output [12:0] m,
output out_f_1,out_f_2,out_f_3,out_f_4
);
reg [12:0] x_1;
reg out_1,out_2,out_3,out_4;
reg nop;
reg [4:0] bi;
reg [31:0] abslution_xa;
always@(posedge clock)
begin
integer i;
for(i=0;i<5 ;i=i+1)
begin
if(b[i]==1)
begin
bi=i;
end
else
begin
nop=nop+1;
end
end
if((x-a)>=0)
begin
abslution_xa=x-a;
if((((abslution_xa<<4'b1010))>>bi)>=9'b100000000)
begin
x_1=0;
out_1=1;
out_2=0;
out_3=0;
out_4=0;
end
else
begin
x_1=9'b100000000-(((abslution_xa<<4'b1010))>>bi);
out_1=0;
out_2=1;
out_3=0;
out_4=0;
end
//multi=2^9
end
else
begin
abslution_xa=a-x;
if(((((abslution_xa)<<4'b1010))>>bi)>=9'b100000000)
begin
x_1=0;
out_1=0;
out_2=0;
out_3=1;
out_4=0;
end
else
begin
x_1=9'b100000000-((((abslution_xa)<<4'b1010))>>bi);
out_1=0;
out_2=0;
out_3=0;
out_4=1;
end
end
end
assign m=x_1;
assign out_f_1=out_1;
assign out_f_2=out_2;
assign out_f_3=out_3;
assign out_f_4=out_4;
endmodule
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.216.71
※ 編輯: psw 來自: 140.116.216.71 (04/09 20:04)
※ 編輯: psw 來自: 140.116.216.71 (04/09 20:05)
1F:推 luckyBF:b=16的話,b[4:0] = 2'b10000 ; b[4] = 1 ; bi = 4 04/09 20:47
2F:→ luckyBF:比較好奇nop是什麼?只有1個bit為什麼要一直加1? 04/09 20:48
因為有if 要配上一個else 但else不知道要算什麼,就用nop
3F:→ luckyBF:還有out_f_1到4是您用來debug用的嗎XD 04/09 20:48
是的
※ 編輯: psw 來自: 140.116.216.71 (04/09 20:55)
4F:推 pupucar:誰告訴你一個if一定要配一個else的?HDL硬體描述語言 04/09 21:11
如果沒配上有可能會產生Latch,不是嗎?
5F:→ pupucar:就是用語言去model硬體 先搞清楚你寫出來的東西會model成 04/09 21:13
※ 編輯: psw 來自: 140.116.216.71 (04/09 21:14)
6F:→ pupucar:什的東西 才是在寫HDL 04/09 21:14
7F:推 pupucar:不是 04/09 21:16
8F:推 pupucar:你用自己的想法臆測半天想不通 怎不直接合成出來看硬體 04/09 21:18
9F:→ pupucar:通常是硬體設計完後才思考如何用HDL去model 04/09 21:19
10F:→ pupucar:你的作法剛剛好相法... 04/09 21:20
11F:推 luckyBF:for 裡面的i應該要<5吧...還有這程式...真的要反省一下XD 04/09 21:45
嘖嘖...LUCK大你真專業..( ̄▽ ̄#)﹏﹏
※ 編輯: psw 來自: 140.116.216.71 (04/09 22:04)
12F:推 luckyBF:不不~~我很嫩~~這個版強者太多了!!但真的建議好好想想寫法 04/09 22:09
問題還沒解決...〒△〒
13F:推 mepass:一般來說 最好邊寫邊對照netlist是不是自己要的 04/09 22:30
14F:→ mepass:不過前提是要有羅設或計組基礎 04/09 22:31
※ 編輯: psw 來自: 140.116.216.71 (04/09 23:13)
15F:推 luckyBF:問題有可能在if那,x-a左移10bit,移完都不知道變什麼了~ 04/09 23:22
16F:→ luckyBF:重點要有電路的觀念~不然真的只是在寫「軟體」而已 04/09 23:23
17F:→ bakerly:我想問個問題,你的答案是在第幾個T得到的?還有個建議 04/10 00:16
18F:→ bakerly:寫RTL每個訊號幾個BIT最好清清楚楚,你的IF裡的判斷式寫這 04/10 00:18
19F:→ bakerly:樣不清不楚,全看simulator的臉色,很容易死的不明不白的 04/10 00:19
這樣清楚了嗎? ^^
可是還是有錯誤 XD..
※ 編輯: psw 來自: 140.116.216.71 (04/10 00:53)
※ 編輯: psw 來自: 140.116.216.71 (04/10 00:54)
20F:→ tkhan:這是在寫C嗎?..先搞懂基礎再來.. 04/10 07:36
這位tk大大,我改了,不知道這樣可不可以?不知道你覺得哪裡有不普的地方? <(_ _)>
※ 編輯: psw 來自: 140.116.216.71 (04/10 10:11)
※ 編輯: psw 來自: 140.116.216.71 (04/10 10:25)
21F:推 sasako:9'b100000000寫成9'd256或256 4'b1010寫成10 會不會比較容 04/10 10:55
22F:→ sasako:易閱讀呢? 04/10 10:55
23F:→ psw:是x-a的bit線沒有標明出問題..已解決,謝謝大家的回應 ^ ^ 04/11 11:26