[转帖]FPGA--Vivado
來源:http://home.eeworld.com.cn/my/space-uid-639749-blogid-267593.html
一般的,在Verilog中最常用的編碼方式有二進制編碼(Binary)、格雷碼(Gray-code)編碼、獨熱碼(One-hot)編碼。
二進制碼和格雷碼是壓縮狀態編碼。 若使用格雷編碼,則相鄰狀態轉換時只有一個狀態位發生翻轉,這樣不僅能消除狀態轉換時由多條狀態信號線的傳輸延遲所造成的毛刺,又可以降低功耗。
?? 二進制編碼也可稱連續編碼,也就是碼元值的大小是連續變化的。如S0=3'd0,S1=3'd1,S2=3'd2,S3=3'd3....
?? 格雷碼的相鄰碼元值間只有一位是不同的,如S0=3'b000,S1=3'b001,S2=3'b011,S3=3'b010....
獨熱編碼即 One-Hot 編碼,又稱一位有效編碼,其方法是使用N位狀態寄存器來對N個狀態進行編碼,每個狀態都由他獨立的寄存器位,并且在任意時候,其中只有一位有效。雖然使用較多的觸發器,但由于狀態譯碼簡單,可減少組合邏輯且速度較快, 這種編碼方式還易于修改,增加狀態或改變狀態轉換條件都可以在不影響狀態機的其它部分的情況下很方便地實現。另外,它的速度獨立于狀態數量。與之相比,壓縮狀態編碼在狀態增加時速度會明顯下降。
?? 獨熱碼值每個碼元值只有一位是'1',其他位都是'0',如S0=3'b001,S1=3'b010,S2=3'b100
?
問題:USB升級FPGA程序完成后,給板子通電,發現啟動FLASH中程序非常的慢,等了超長時間LED燈才有反應。
用Xilinx下載線直接將MCS的FPGA程序固化到FLASH也出現同樣的問題。
?解決方法是在Vivado工具中設置配置FLASH時鐘,默認是3MHZ,可改成50MHZ。
方法是先open implemented design,待打開實現設計窗口后,再Tools下拉菜單選擇Edit Device Properties,該選項下Configuration中Configuration Rate(MHz).
?
Cypress賽普拉斯 Spansion? Micron公司關系? 存儲器市場
來源:http://bbs.eetop.cn/viewthread.php?tid=386148
關于altera fpga 時鐘切換(clk mux) 的討論
首先我用fpga是 altera cyclone II:??里面有個時鐘mux: 一個時鐘來自 pll , 一個時鐘來自tck (jtag)
// 需要不同時鐘的debug_ram。
debug_ram
debug_ram_inst (.address (clk_sw ? jtag_addr : rom_addr),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???.clken? ?(jtag_wr|~rom_rd_n? ?? ?? ?? ?),
? ?? ?? ?? ?? ?? ?? ?? ?.clock? ?(debug_ram_clk? ?? ?? ?? ?? ? ),
? ?? ?? ?? ?? ?? ?? ?? ?.data? ? (jtag_data? ?? ?? ?? ?? ?? ???),
? ?? ?? ?? ?? ?? ?? ?? ?.wren? ? (jtag_wr? ?? ?? ?? ?? ?? ?? ? ),
? ?? ?? ?? ?? ?? ?? ?? ?.q? ?? ? (rom_data? ?? ?? ?? ?? ?? ?? ?)
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?);
(1)如果直接用rtl作邏輯選擇:assign debug_ram_clk = clk_sw ? tck : clk;??//使用此邏輯綜合要報rom_addr hold violation 時序warning(估計是因為做時鐘切換clk時鐘延時太長,看時序報告rom_addr hold需要2點幾納鈔)
??(2) 如果使用quartus ii 里的 ip, altclkctrl :clk_ctrl
u_clk_ctrl(.clkselect( clk_sw? ?? ?? ?? ?),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?.inclk0x??( clk? ?? ?? ?? ?? ?? ?),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?.inclk1x??( tck? ?? ?? ?? ?? ???),
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?.outclk? ?( debug_ram_clk)
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?);
? ?? ???會報如此錯:Error: inclk[0] port of Clock Control Block "clk_ctrl:u_clk_ctrl|clk_ctrl_altclkctrl_8af:clk_ctrl_altclkctrl_8af_component|clkctrl1" is driven by PLL LL_inst|altpll:altpll_component|_clk0, but must be driven by a clock pin
? ?? ?? ?? ?? ?? ?? ?? ? Error: inclk[1] port of Clock Control Block "clk_ctrl:u_clk_ctrl|clk_ctrl_altclkctrl_8af:clk_ctrl_altclkctrl_8af_component|clkctrl1" is driven by altera_internal_jtag~TCKUTAP, but must be driven by a clock pin
? ?? ?? ?//不知道為什么會報錯,還在查資料中,也請大神賜教。。。。
(3)使用時鐘mux代碼如下:
module clk_mux#(parameter num_clk = 2? ?? ?)
? ?? ?? ?? ?? ?(input??[num_clk-1:0] clk? ? ,
//input??[num_clk-1:0] clk_rst,
input??[num_clk-1:0] clk_sel,
output clk_o
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???);
genvar i;
reg??[num_clk-1:0] ena_r0;
reg??[num_clk-1:0] ena_r1;
reg??[num_clk-1:0] ena_r2;
wire [num_clk-1:0] qualified_sel;
// A look-up-table (LUT) can glitch when multiple inputs
// change simultaneously. Use the keep attribute to
// insert a hard logic cell buffer and prevent
// the unrelated clocks from appearing on the same LUT.
wire [num_clk-1:0] gated_clks /* synthesis keep */;
wire [num_clk-1:0] tmp_mask[0:num_clk-1];
generate
??for (i=0; i<num_clk; i=i+1)
??begin : lp0
? ? assign tmp_mask = {num_clk{1'b1}} ^ (1 << i);
? ? assign qualified_sel = clk_sel & (~|(ena_r2 & tmp_mask));
? ? always @(posedge clk) begin
? ? ena_r0 <= qualified_sel;
? ? ena_r1 <= ena_r0;
??end
??always @(negedge clk) begin
??ena_r2 <= ena_r1;
??end
??assign gated_clks = clk & ena_r2;
end
endgenerate
// These will not exhibit simultaneous toggle by construction
assign clk_o = |gated_clks;
endmodule
電路如下:
2013-3-29 20:05
再實例化:clk_mux u_clk_mux({tclk,clk},{clk_sw,~clk_sw},debug_ram_clk); // 則這樣就不會報錯
(4)還有一種方法是動態配置pll(有些altera fpga支持),可是有一個時鐘不是來自pll,故不能使用此方法了
前三種方法,暫時只有(3)不報錯
Clock Control Block (ALTCLKCTRL) Megafunction資料上有如此表格:
2013-3-28 22:18
下有如此一段話:The global clock network allows a clock signal (or other global signals) to reach all parts of the chip with a similar amount of skew. The regional clock network allows a signal to reach one quadrant of the chip (though half of the chip can be reached by driving two quadrants). The external clock-out path represents the clock path from the outputs of the phase-locked loop (PLL) to the dedicated PLL_OUT pins. The ALTCLKCTRL megafunction also provides glitch-free implementation for multiple clock input signals.
好像:cyclone II 只支持(1)global clock network ,(2) Dedicated External Clock Out Path , 但是選擇(2)又無法支持時鐘的mux,如下圖:
2013-3-28 22:24
完全無語呀,限制真心多
糾正:其實(3)也會報rom_addr相對clk的hold violation的WARNING(原因是之類代碼有點問題)
歡迎大家多多討論,不知道大家一般在fpga中怎么做clk的mux呢。。。
來源:http://bbs.elecfans.com/jishu_219906_1_1.html
為什么FPGA時鐘頻率不高,卻適合做高速處理?Filed Programmable Gate Array??現場可編輯邏輯陣列
我在我的同學面前炫耀FPGA是做高速處理的,可是,當人家問我,我的時鐘頻率能達到多少時,我說利用PLL能拉到200MHz,他說,這么低啊?我的手機頻率都是1.5G的呢。
我無語。。。
后來才了解到,他的1.5G要想完成一個運算的話,因為是串行處理,所以要n個時鐘周期啊,而FPGA雖然起點(時鐘頻率慢),可是通過并行,處理數據的能力極大提高。
FPGA要實現高速的并行處理數據,那也得看處理什么數據!如果相關性比較大的一堆數據,那你是無法實現很好的并行性的。因此,FPGA更適合處理圖像、視頻等相關性不大的數據。
全同步的數字電路設計,一般使用一個全局時鐘,作為驅動所有時序邏輯的主時鐘。但如果設計比較復雜,可能會引入多個主時鐘,即多時鐘域的設計。這時,FPGA系統時鐘頻率約束就默認對應于所有主時鐘的頻率約束。如果希望設定不同的時鐘頻率約束,就必須單獨給每個主時鐘設定約束。
模擬(Emulation)是試圖模仿一個設備的內部設計;仿真(Simulation)是試圖模仿一個設備的功能。
http://china.xilinx.com/training/vivado/index.htm?Vivado的視頻輔導資料
《企業用verilog_代碼風格規范》來源:http://www.docin.com/p-602544098.html
?Verilog HDL 華為入門教程
http://wenku.baidu.com/view/1de5f06527d3240c8447ef95.html
Verilog典型電路設計 華為
http://wenku.baidu.com/view/daf2690e52ea551810a687e9.html
華為fpga設計規范(Verilog Hdl)
http://wenku.baidu.com/view/2c07b8e9856a561252d36f25.html
?
Vivado HLS全稱是High Level Synthesis高層次綜合。從以器件為中心的開發上升到以IP和系統為中心的開發。‘All Programmable’器件。嵌入ARM Cortex-A9雙核的Zynq7000器件。
VBO與LVDS互轉的廠家有Himax和THine。
LVDS轉VBO的芯片:Himax家HX6512-A, 00DFAG-B,351GNBGC
VBO轉LVDS的芯片:THime家0845TN43, THCV215 ES4
來源:http://china.xilinx.com/training/vivado/vivado-design-methodology.htm
HDL 代碼建議目標硬件、約束生成和驗證最佳方法、使用物理約束的規劃和分析工具,如時鐘和引腳規劃,以及最佳性能的布局規劃。
來源:http://wenku.baidu.com/link?url=ChCiOJWKLyD95VFd_s2K8QiUBjmWzqu21sBDlfjTI7r3vRV1dhSeVW7wx1w-R4_FdjoTPxsJZslwKxF9OojWTdVml5CNzAN12cOiegk5B1S
?
轉載于:https://www.cnblogs.com/zlh840/p/4225399.html
總結
以上是生活随笔為你收集整理的[转帖]FPGA--Vivado的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django 的请求处理部分----WS
- 下一篇: Linux 多学习过程