[問題] Quartus_verilog 為什麼輸出的波型是錯的

看板Electronics作者 (ICK)時間16年前 (2010/04/09 20:00), 編輯推噓9(9018)
留言27則, 8人參與, 7年前最新討論串1/2 (看更多)
各位大哥 可不可以幫小弟看一下這個程式碼,為什麼出輸波型是錯的? 小弟我找了好久也找不出來..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)

04/09 20:47, , 1F
b=16的話,b[4:0] = 2'b10000 ; b[4] = 1 ; bi = 4
04/09 20:47, 1F

04/09 20:48, , 2F
比較好奇nop是什麼?只有1個bit為什麼要一直加1?
04/09 20:48, 2F
因為有if 要配上一個else 但else不知道要算什麼,就用nop

04/09 20:48, , 3F
還有out_f_1到4是您用來debug用的嗎XD
04/09 20:48, 3F
是的 ※ 編輯: psw 來自: 140.116.216.71 (04/09 20:55)

04/09 21:11, , 4F
誰告訴你一個if一定要配一個else的?HDL硬體描述語言
04/09 21:11, 4F
如果沒配上有可能會產生Latch,不是嗎?

04/09 21:13, , 5F
就是用語言去model硬體 先搞清楚你寫出來的東西會model成
04/09 21:13, 5F
※ 編輯: psw 來自: 140.116.216.71 (04/09 21:14)

04/09 21:14, , 6F
什的東西 才是在寫HDL
04/09 21:14, 6F

04/09 21:16, , 7F
不是
04/09 21:16, 7F

04/09 21:18, , 8F
你用自己的想法臆測半天想不通 怎不直接合成出來看硬體
04/09 21:18, 8F

04/09 21:19, , 9F
通常是硬體設計完後才思考如何用HDL去model
04/09 21:19, 9F

04/09 21:20, , 10F
你的作法剛剛好相法...
04/09 21:20, 10F

04/09 21:45, , 11F
for 裡面的i應該要<5吧...還有這程式...真的要反省一下XD
04/09 21:45, 11F
嘖嘖...LUCK大你真專業..( ̄▽ ̄#)﹏﹏ ※ 編輯: psw 來自: 140.116.216.71 (04/09 22:04)

04/09 22:09, , 12F
不不~~我很嫩~~這個版強者太多了!!但真的建議好好想想寫法
04/09 22:09, 12F
問題還沒解決...〒△〒

04/09 22:30, , 13F
一般來說 最好邊寫邊對照netlist是不是自己要的
04/09 22:30, 13F

04/09 22:31, , 14F
不過前提是要有羅設或計組基礎
04/09 22:31, 14F
※ 編輯: psw 來自: 140.116.216.71 (04/09 23:13)

04/09 23:22, , 15F
問題有可能在if那,x-a左移10bit,移完都不知道變什麼了~
04/09 23:22, 15F

04/09 23:23, , 16F
重點要有電路的觀念~不然真的只是在寫「軟體」而已
04/09 23:23, 16F

04/10 00:16, , 17F
我想問個問題,你的答案是在第幾個T得到的?還有個建議
04/10 00:16, 17F

04/10 00:18, , 18F
寫RTL每個訊號幾個BIT最好清清楚楚,你的IF裡的判斷式寫這
04/10 00:18, 18F

04/10 00:19, , 19F
樣不清不楚,全看simulator的臉色,很容易死的不明不白的
04/10 00:19, 19F
這樣清楚了嗎? ^^ 可是還是有錯誤 XD.. ※ 編輯: psw 來自: 140.116.216.71 (04/10 00:53) ※ 編輯: psw 來自: 140.116.216.71 (04/10 00:54)

04/10 07:36, , 20F
這是在寫C嗎?..先搞懂基礎再來..
04/10 07:36, 20F
這位tk大大,我改了,不知道這樣可不可以?不知道你覺得哪裡有不普的地方? <(_ _)> ※ 編輯: psw 來自: 140.116.216.71 (04/10 10:11) ※ 編輯: psw 來自: 140.116.216.71 (04/10 10:25)

04/10 10:55, , 21F
9'b100000000寫成9'd256或256 4'b1010寫成10 會不會比較容
04/10 10:55, 21F

04/10 10:55, , 22F
易閱讀呢?
04/10 10:55, 22F

04/11 11:26, , 23F
是x-a的bit線沒有標明出問題..已解決,謝謝大家的回應 ^ ^
04/11 11:26, 23F

08/13 18:58, , 24F
寫RTL每個訊號幾個B https://muxiv.com
08/13 18:58, 24F

09/17 22:53, , 25F
重點要有電路的觀念~不 https://daxiv.com
09/17 22:53, 25F

11/11 15:45, , 26F
還有out_f_1到4 https://muxiv.com
11/11 15:45, 26F

01/04 22:09, 7年前 , 27F
01/04 22:09, 27F
文章代碼(AID): #1BlnRF4N (Electronics)
文章代碼(AID): #1BlnRF4N (Electronics)