[心得] HDL合成

看板Electronics作者 (修行)時間15年前 (2009/04/07 07:52), 編輯推噓6(6049)
留言55則, 8人參與, 5年前最新討論串1/1
一般我們都說Verilog中initial是"不能合成"的。 其是所謂的"不能合成",有兩種意義,一種是"不可能合成", 另一種是"合成器不支援"。 "不支援"比起"不可能"還有周旋餘地。 "不可能"把話說死了,即使未來的工藝技術(state of the art) 再怎麼進步都不可能合成出來的意思。 事上很多HDL語法僅僅只是當代的state of the art不支援罷了。 也沒人證明出哪一個HDL語法保證不可能合成。 但有standard規定哪些語法保證可合成,例如[1]: IEEE 1364.1 Verilog register transfer level synthesis 我以前一直說initial語法不能合成。 今天我看IEEE 1364.1發現initial在某些情況下是可合成的。 例如以下這個範例[1](原始的code有點bug,我稍微修改了一下): ~~~~~~~~~~~~~~~~~~~~~~~rom_2dimarray_initial.v~~~~~~~~~~~~~~~~ module rom_2dimarray_initial ( output wire [3:0] z, input wire [2:0] a); reg [3:0] rom[7:0]; initial begin rom[0] = 4'b1011; rom[1] = 4'b0001; rom[2] = 4'b0011; rom[3] = 4'b0010; rom[4] = 4'b1110; rom[5] = 4'b0111; rom[6] = 4'b0101; rom[7] = 4'b0100; end assign z = rom[a]; endmodule ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 這在Xilinx ISE 8.2i是可以合成出來的。我跑過post-layout simulation也是正確的。 其實這code是在model一個ROM。 所以,說"當代合成器不支援某個語法",會比說"不能合成"的好。 因為"不能合成"有兩種意思。 [1] IEEE, "IEEE 1364.1 Verilog register transfer level synthesis," http://ieeexplore.ieee.org/Xplore/dynhome.jsp -- 西方三聖:http://p8.p.pixnet.net/albums/userpics/8/3/553683/1193661731.jpg
《佛說阿彌陀經》http://web.cc.ncu.edu.tw/~93501025/amtf.doc 十一面觀音咒:http://file.buda.idv.tw/music/DBZFY04.mp3 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.220.219 ※ 編輯: zxvc 來自: 140.115.220.219 (04/07 07:53)

04/07 07:56, , 1F
其實說"大多數的合成器不能合成"也不錯,因為沒有把話說死。
04/07 07:56, 1F

04/07 08:39, , 2F
那應該算是書本的問題巴~時代會進步
04/07 08:39, 2F

04/07 08:39, , 3F
早期的書這樣寫並不算錯誤~現在幾乎都可以這樣合成了
04/07 08:39, 3F

04/07 09:23, , 4F
那是因為你用FPGA的緣故才能和成出initial
04/07 09:23, 4F

04/07 09:24, , 5F
如果今天你是在asic design flow 裡依然不行
04/07 09:24, 5F

04/07 09:26, , 6F
你想想看你所認識的邏輯閘有那些東西可以兜出initial
04/07 09:26, 6F

04/07 09:26, , 7F
FPGA因為他也算一顆ASIC 他有內部的RESET信號
04/07 09:26, 7F

04/07 09:28, , 8F
他是利用一開始的RESET去初始化
04/07 09:28, 8F

04/07 09:29, , 9F
所以並非是用邏輯閘去兜出來
04/07 09:29, 9F

04/07 09:30, , 10F
數位任何電路都是邏輯閘變成的 想想哪個邏輯閘可以和成
04/07 09:30, 10F

04/07 09:31, , 11F
該FUNCTION 就知道何不合理
04/07 09:31, 11F

04/07 10:51, , 12F
同意樓上。在學習HDL之前應加強對邏輯閘的認識。
04/07 10:51, 12F

04/07 14:26, , 13F
他寫的電路是單純的組合邏輯 應該沒有啥reset問題吧?!
04/07 14:26, 13F

04/07 14:28, , 14F
抱歉 沒看到REG 當我沒說 不過要寫ROM我也不會這樣寫
04/07 14:28, 14F

04/07 14:38, , 15F
囧 再修正一下 剛剛在ISE試過了是純組合邏輯沒錯 突然腦殘
04/07 14:38, 15F

04/07 16:10, , 16F
h大,ROM只是純combinational circuit,不需要reset訊號。
04/07 16:10, 16F

04/07 16:12, , 17F
我用Design Compiler 2004合成,的確有看到忽略initial的訊
04/07 16:12, 17F

04/07 16:13, , 18F
息。合成(compile)可以過,但最後的電路不是我要的ROM。
04/07 16:13, 18F

04/07 16:15, , 19F
initial在這種code所model的東西,並不是一個什麼初始化的
04/07 16:15, 19F

04/07 16:17, , 20F
電路。所以ISE可以合得出來,並不是因為它可以合你說的這種
04/07 16:17, 20F

04/07 16:18, , 21F
initial電路。而Design Compiler之所以不能合,我認為只是它
04/07 16:18, 21F

04/07 16:19, , 22F
不完全支援IEEE 1364.1。
04/07 16:19, 22F

04/07 16:20, , 23F
Design Compiler怎麼會笨到不能合ROM?
04/07 16:20, 23F

04/07 16:21, , 24F
只不過要用Design Compiler合ROM要用另外一種寫法。
04/07 16:21, 24F

04/07 16:23, , 25F
況且說我上面code可以合是IEEE 1364.1自己說可以合的
04/07 16:23, 25F

04/07 16:24, , 26F
IEEE 1364.1何必說一個不能合的code可以合呢?
04/07 16:24, 26F

04/07 16:24, , 27F
所以這只是Design Compiler 2004不支援IEEE 1364.1的標準。
04/07 16:24, 27F

04/07 16:29, , 28F
這邊非常抱歉 我沒看清楚你寫的code
04/07 16:29, 28F

04/07 16:29, , 29F
依你的設計模式和成一個ROM是OK的
04/07 16:29, 29F

04/07 16:30, , 30F
一開使我誤以為又有人要在暫存器上給初始值了
04/07 16:30, 30F

04/07 16:31, , 31F
所以是我誤會你了 這邊說聲抱歉
04/07 16:31, 31F

04/07 17:48, , 32F
h大,沒關係。不過這種寫法還是少寫為妙,我目前只有ISE合得
04/07 17:48, 32F

04/07 17:49, , 33F
出來ROM。其它都合出一些很怪的東西。
04/07 17:49, 33F

04/07 17:50, , 34F
Quartus II 9.0合出來的電路gate-level模擬結果是錯的。
04/07 17:50, 34F

04/07 17:53, , 35F
Design Compiler合出z訊號全是0。
04/07 17:53, 35F

04/07 17:54, , 36F
Cadence RTL Compiler也是忽略initial敘述。
04/07 17:54, 36F

04/07 18:39, , 37F
大部分的FPGA開電後,先把資料從SRAM/Flash搬移到cell內,
04/07 18:39, 37F

04/07 18:40, , 38F
所以可以指定每個bit的initial value
04/07 18:40, 38F

04/07 20:20, , 39F
雖然initail合成rom看來只能在ise用, 我也不會這樣用,
04/07 20:20, 39F

04/07 20:22, , 40F
但我大推這篇文章, 因為對tool有深入瞭解是成為好的
04/07 20:22, 40F

04/07 20:22, , 41F
designer的必要條件
04/07 20:22, 41F

04/07 20:37, , 42F
說個故事 某家design house的某顆chip, 用了不少由
04/07 20:37, 42F

04/07 20:37, , 43F
memory compiler產生的sram blocks, 後來才發現
04/07 20:37, 43F

04/07 20:37, , 44F
ower ring width是可以設定的 若設成跟競爭對手一樣寬,
04/07 20:37, 44F

04/07 20:37, , 45F
die cost可減少好幾角NTD... 那顆chip是低價大量
04/07 20:37, 45F

04/07 20:37, , 46F
的產品, 每顆差幾角, 一個月至少差好幾十萬
04/07 20:37, 46F

04/07 20:38, , 47F
整個1-2年的life cycle就差好幾百萬了
04/07 20:38, 47F

04/07 20:38, , 48F
因只是沒人仔細去study memory compiler的設定...
04/07 20:38, 48F

04/07 20:39, , 49F
power ring width... 發現時已量產一段時間了...
04/07 20:39, 49F

04/07 20:53, , 50F
p大,ISE合出來的真的只是一個combinational的ROM。SRAM是
04/07 20:53, 50F

04/07 20:53, , 51F
sequantial circuit。
04/07 20:53, 51F

04/07 20:54, , 52F
這是ISE合出上面code的RTL schematic:
04/07 20:54, 52F

04/07 20:55, , 53F
04/07 20:55, 53F

11/11 15:03, , 54F
如果今天你是在asic https://noxiv.com
11/11 15:03, 54F

01/04 21:54, 5年前 , 55F
01/04 21:54, 55F
文章代碼(AID): #19sfNJ0x (Electronics)