看板 Electronics 關於我們 聯絡資訊
各位大哥 可不可以幫小弟看一下這個程式碼,為什麼出輸波型是錯的? 小弟我找了好久也找不出來..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)
luckyBF:b=16的話,b[4:0] = 2'b10000 ; b[4] = 1 ; bi = 4 04/09 20:47
luckyBF:比較好奇nop是什麼?只有1個bit為什麼要一直加1? 04/09 20:48
因為有if 要配上一個else 但else不知道要算什麼,就用nop
luckyBF:還有out_f_1到4是您用來debug用的嗎XD 04/09 20:48
是的 ※ 編輯: psw 來自: 140.116.216.71 (04/09 20:55)
pupucar:誰告訴你一個if一定要配一個else的?HDL硬體描述語言 04/09 21:11
如果沒配上有可能會產生Latch,不是嗎?
pupucar:就是用語言去model硬體 先搞清楚你寫出來的東西會model成 04/09 21:13
※ 編輯: psw 來自: 140.116.216.71 (04/09 21:14)
pupucar:什的東西 才是在寫HDL 04/09 21:14
pupucar:不是 04/09 21:16
pupucar:你用自己的想法臆測半天想不通 怎不直接合成出來看硬體 04/09 21:18
pupucar:通常是硬體設計完後才思考如何用HDL去model 04/09 21:19
pupucar:你的作法剛剛好相法... 04/09 21:20
luckyBF:for 裡面的i應該要<5吧...還有這程式...真的要反省一下XD 04/09 21:45
嘖嘖...LUCK大你真專業..( ̄▽ ̄#)﹏﹏ ※ 編輯: psw 來自: 140.116.216.71 (04/09 22:04)
luckyBF:不不~~我很嫩~~這個版強者太多了!!但真的建議好好想想寫法 04/09 22:09
問題還沒解決...〒△〒
mepass:一般來說 最好邊寫邊對照netlist是不是自己要的 04/09 22:30
mepass:不過前提是要有羅設或計組基礎 04/09 22:31
※ 編輯: psw 來自: 140.116.216.71 (04/09 23:13)
luckyBF:問題有可能在if那,x-a左移10bit,移完都不知道變什麼了~ 04/09 23:22
luckyBF:重點要有電路的觀念~不然真的只是在寫「軟體」而已 04/09 23:23
bakerly:我想問個問題,你的答案是在第幾個T得到的?還有個建議 04/10 00:16
bakerly:寫RTL每個訊號幾個BIT最好清清楚楚,你的IF裡的判斷式寫這 04/10 00:18
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)
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)
sasako:9'b100000000寫成9'd256或256 4'b1010寫成10 會不會比較容 04/10 10:55
sasako:易閱讀呢? 04/10 10:55
psw:是x-a的bit線沒有標明出問題..已解決,謝謝大家的回應 ^ ^ 04/11 11:26
sneak: 寫RTL每個訊號幾個B https://muxiv.com 08/13 18:58
sneak: 重點要有電路的觀念~不 https://daxiv.com 09/17 22:53
sneak: 還有out_f_1到4 https://muxiv.com 11/11 15:45
sneak: 不是 https://muxiv.com 01/04 22:09