「verilog for合成」的推薦目錄:
- 關於verilog for合成 在 コバにゃんチャンネル Youtube 的最佳解答
- 關於verilog for合成 在 大象中醫 Youtube 的最佳貼文
- 關於verilog for合成 在 大象中醫 Youtube 的精選貼文
- 關於verilog for合成 在 [問題] verilog 合成問題- 看板Electronics - 批踢踢實業坊 的評價
- 關於verilog for合成 在 [問題] verilog 合成問題 - Mo PTT 鄉公所 的評價
- 關於verilog for合成 在 Verilog 的電路合成研究-- 以MUX 多工器為例(使用Altera ... 的評價
- 關於verilog for合成 在 Verilog、VHDL和其他HDL程式的Web線上編輯器,它可寫上述 ... 的評價
- 關於verilog for合成 在 Verilog (2) – 硬體語言的基礎(作者:陳鍾誠) 的評價
- 關於verilog for合成 在 [問題] verilog的合成問題 的評價
- 關於verilog for合成 在 Re: [問題] verilog中if else和case合成後的差別- 看板Electronics 的評價
- 關於verilog for合成 在 Verilog 介紹| 他山教程,只選擇最優質的自學材料 的評價
verilog for合成 在 大象中醫 Youtube 的最佳貼文
verilog for合成 在 大象中醫 Youtube 的精選貼文
verilog for合成 在 [問題] verilog 合成問題 - Mo PTT 鄉公所 的推薦與評價
各位前輩好,雖然我已經寫了verilog 幾個學期了,但是以前都是用modelsim 跑測資檔。殊不知,這學期開始要用quartus ii 合成,才發現原來我一直都是帶 ... ... <看更多>
verilog for合成 在 [問題] verilog 合成問題- 看板Electronics - 批踢踢實業坊 的推薦與評價
各位前輩好,雖然我已經寫了 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://www.ptt.cc/bbs/Electronics/M.1585848827.A.307.html
※ 編輯: eecheng87 (218.164.116.170 臺灣), 04/03/2020 01:37:06
... <看更多>
相關內容