Electronics 板


LINE

各位前輩好,雖然我已經寫了 verilog 幾個學期了,但是以前都是用 modelsim 跑測資 檔。殊不知,這學期開始要用 quartus ii 合成,才發現原來我一直都是帶著錯誤觀念寫 錯的程式。 目前我遇到的問題是,在 modelsim 能編譯過,而且測資檔也能過。拿到 quartus 合成 的時候,也成功,但是噴一堆警告。然後如果不理會警告,把生成的 .vo 和 .sdo 再那 去 modelsim 跑測資發現輸出都是 xxxxxx。所以我想應該是合成出錯的東西了。 希望各位前輩如果有空的話,稍微幫我看一下我的 verilog 哪裡有嚴重的疏失。以下是 8 bit 的無號除法器,用組合電路寫的。(附上排版比較好的連結 https://ideone.com/PITrCL) 程式碼: `timescale 1ns / 10ps module div(out, in1, in2, dbz); parameter width = 8; input [width-1:0] in1; // Dividend input [width-1:0] in2; // Divisor output reg [width-1:0] out; // Quotient output reg dbz; reg [3:0] it; reg [width * 2 - 1:0] dividen; reg [width * 2 - 1:0] diviser[8:0]; reg [width - 1:0] q; reg res1, res2, res3; initial begin res1 = 0; res2 = 0; res3 = 0; it = 0; end always@(in1 or in2)begin if(!{in2,{width{1'b0}}})begin dbz = 1; end else if(!{{width{1'b0}},in1}) begin dbz = 0; end else begin dbz = 0; res1 = ~res1; end end always@(res3 or res1)begin if(it == 0)begin diviser[0] = {in2,{width{1'b0}}}; dividen = {{width{1'b0}},in1}; end else begin diviser[0] = diviser[0]; dividen = dividen; end if(it < 9)begin if(!dividen && !it)begin out = 0; end else if(dividen >= diviser[it])begin dividen = dividen - diviser[it]; q[width - it] = 1; diviser[it + 1] = diviser[it]>>1; res2 = ~res2; end else begin q[width - it] = 0; diviser[it + 1] = diviser[it]>>1; res2 = ~res2; end end else begin out = q; res2 = ~res2; end end always@(res2)begin #1 if(it==9)begin it = 0; res3 = res3; end else begin it = it + 1'b1; res3 = ~res3; end end endmodule 演算法主要是除數和被除數相比,來決定商是0或1,每次商左移一格,除數右移一格。It 紀錄移動的次數,最多八次。 稍後我在留言附上我在 quartus 合成的警告,我有查過相似的狀況,但改了之後警告都 沒少。 我嘗試過的改動: 1. if else 沒寫滿,可能產生 latch 2. if 出現的變數在 else 也要出現 現在這裡謝謝各位的幫忙。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.116.170 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Electronics/M.1585848827.A.307.html
1F:→ eecheng87: https://i.imgur.com/7C5EGK7.jpg04/03 01:35
2F:→ eecheng87: https://i.imgur.com/jgyYqYB.jpg04/03 01:35
3F:→ eecheng87: https://i.imgur.com/bPRPq9m.jpg04/03 01:36
※ 編輯: eecheng87 (218.164.116.170 臺灣), 04/03/2020 01:36:23 ※ 編輯: eecheng87 (218.164.116.170 臺灣), 04/03/2020 01:37:06
4F:推 zace15: 你寫的不是RTL,合成是合不出initial的 04/03 03:00
5F:推 bakerly: 1.initial是不可合成的. 2.always寫combination logic時i 04/03 08:04
6F:→ bakerly: nput沒寫在sensitive list裡就會合出latch。 3.這個電路 04/03 08:04
7F:→ bakerly: 沒看到clk,看來是純組合邏輯組成的,又有timing loop, 04/03 08:04
8F:→ bakerly: 就算真合的出來了應該也會跑錯吧。 04/03 08:04
9F:→ eecheng87: rtl code 如果沒有送 reset 訊號進來,那有辦法初始化 04/03 09:12
10F:→ eecheng87: 嗎? 04/03 09:12
11F:→ eecheng87: 另外一個問題是,組合電路沒辦法寫成 timing loop 嗎? 04/03 09:14
12F:→ eecheng87: 只能老實的把所有狀況寫出來? 04/03 09:14
13F:推 r901042004: 1. 組合電路不需要reset 2. 不能有timing loop 04/03 09:30
14F:→ r901042004: 像是你res1 = ~res1就是loop了 04/03 09:31
15F:→ r901042004: sensitive list想偷懶的話寫*比較不會出錯 04/03 09:31
16F:推 r901042004: 在組合電路的if和case務必要寫滿 04/03 09:34
17F:推 tkhan: 這種問題google就有了,先學會google吧.. 04/03 10:45
18F:推 tkhan: 智商不夠的,建立先看別人怎麼寫code,不然容易走歪.. 04/03 10:47
19F:→ eecheng87: 有建議的地方可以看別人的code嗎? 04/03 11:02
20F:推 tkhan: google verilog 除法器............................ 04/03 11:06
21F:推 bakerly: 組合邏輯沒有reset,你能想像的出來inverter的reset是什 04/03 22:07
22F:→ bakerly: 麼嗎?而timing loop正常情況下是不應該存在的東西,比如 04/03 22:07
23F:→ bakerly: 你把一個inverter的輸出接到它自己的輸入,這就是一條tim 04/03 22:07
24F:→ bakerly: ing loop,這時你畫的出這個inverter的波形嗎? 04/03 22:07
25F:推 arron860306: 寫的時候可以想像對應的電路大概長怎樣 04/07 00:20
26F:推 cyl61123: 我看不出來這有寫幾個學期的水平... 老師是不是教得怪怪 04/09 16:12
27F:→ cyl61123: ? 大一邏輯設計就會說initial不能用在RTL裡了,只是不 04/09 16:12
28F:→ cyl61123: 會解釋原因 04/09 16:12
29F:→ cyl61123: 手邊有verilog manual的話先k一下再開打吧 ,不然synthe 04/09 16:12
30F:→ cyl61123: sis會warning吃到飽 04/09 16:12
31F:推 johnpisces2: 看到initial就看不下去了 04/11 01:20
32F:推 exezx: 先把數學式寫出來 再用verilog實作數學式 04/11 10:31







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP