日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CPLD调试记录

發布時間:2024/3/7 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CPLD调试记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:開發板上電后,串口一直發數據。
解決方式:將電平觸發改為邊沿觸發。

Error (10327): VHDL error at top.vhd(113): can’t determine definition of operator “”="" – found 3 possible definitions
中文:無法確定運算符“” =“的定義-找到3個可能的定義
錯誤代碼
解決方式:去掉std_logic類型數專用的雙引號”“。

Error (10028): Can’t resolve multiple constant drivers for net “rev_ready” at top.vhd(89)
錯誤(10028):無法解析top.vhd(89)的網絡“ rev_ready”的多個常量驅動程序
原因:在多個進程中,給一個信號賦值,那么這個信號到底是多少沒法確定,所以去掉其他進程中的賦值。

常見問題:改變輸出信號的值
再建一個子模塊或process,定義一對新的輸入、輸出信號。新輸入信號接收輸出信號的值,幾個時鐘計數(或其他條件)之后,給新輸出信號賦值。

Error (10822): HDL error at top.vhd(119): couldn’t implement registers for assignments on this clock edge
在這個時鐘邊緣,不能給寄存器賦值。
解決辦法:rising_edge()在進程中只能使用一次。而且在一個“IF”語句中不能有else。而且一定要在進程的最外層。如下圖所示。

Error (10028): Can’t resolve multiple constant drivers for net usartTransferRequestOut" at top.vhd(191)
不能解析usartTransferRequestOut信號的多個常量驅動。
意思是有多個進程使用都給一個信號賦值了。不能同時給一個信號賦值導致數據共享困難。

警告:如果沒有時序驅動,那么電路就成了組合邏輯電路了,會報警告。

術語 :“可綜合”和“不可綜合”
可綜合:可以生成實際電路的。不可綜合與其相反,即不能生成實際電路的,通常用于測試文件。

術語:封裝 模型中封裝可重用代碼的一種方法。是在整個模型中存儲并使用信息的最方便的方式。VHDL有兩個內置封裝,即為“標準”和“TEXTIO”。
關鍵字:package
封裝包括:

  • 封裝聲明(需要)
    類型聲明
    子程序聲明
  • 封裝題(可選)
    子程序定義

術語:庫: 含有封裝或者封裝集。
包括
資源庫

  • 標準封裝
  • IEEE開發的封裝
  • ALTERA組件封裝
  • 設計中 所引用的任意設計單元庫
    工作庫
  • 單元所編譯的庫

線連接的關系是可以1對多但不可以多對1

原因:因為cpld是并行執行的,所以如果多對1的話,當前時刻這個wire的值是多少無法確定。

wire 和reg 的區別

字面理解,線型和寄存器型。
數據保存的區別:線型表示直連,即輸入有變化,輸出立即有變化。寄存器型能保持其值不改變直到觸發條件發生。

使用場景
定義端口時:input 、inout只能使用wire型,output 可以使用wire 或 reg.定義對外信號時,默認是wire型,定義內部信號時,必須聲明是什么型。
賦值使用時:wire只能用在assign 賦值,reg只能用在initial和always環境中。

阻塞(block)/非阻塞性賦值
阻塞賦值:可以認為只有1個步驟的操作,即計算RHS(右手側,表達式右邊)并更新LHS,強調計算更新兩個動作同時性,是一個操作.
非阻塞賦值:每個時鐘上升沿計算、更新一次。所以這種n個變量連續傳遞的數據會有n個時鐘延時。


CPLD資源消耗:CPLD中“==”全等比較非常耗費資源,因此盡量少用。

module參數傳遞:
1、module_name #( parameter1, parameter2) inst_name( port_map);

2、module_name #( .parameter_name(para_value), .parameter_name(para_value)) inst_name (port map);

inout用法

默認狀態是輸出狀態,如果需要將輸出轉換為輸入,需要首先將其配置為高阻狀態,然后再讀取。

組合邏輯應該做的事情
1、取脈沖。
2、狀態轉換。

Warning (21074): Design contains 4 input pin(s) that do not drive logic
** Warning (15610): No output dependent on input pin “sys_clk”**
** Warning (15610): No output dependent on input pin “sys_rst_n”**
警告:沒有輸出依賴這兩個輸入引腳,通常是程序錯誤造成的。程序錯誤多種多樣,可以阻塞賦值改非阻塞賦值或者其他。。

always塊中語句執行時間:一次觸發條件滿足,所有符合條件的語句都會執行一遍,其實就是某一條符合條件的電路通了。這個特點決定了在邊沿觸發的時序邏輯電路中,不適合用阻塞賦值,使用阻塞賦值可能會導致無法預料的錯誤或不可綜合。阻塞賦值的特點是執行完某條語句之前,后面的語句不能執行,和always塊的執行邏輯有沖突的地方。阻塞賦值一般用在組合邏輯電路。

串口調試輸出丟數據 SPI的速度太快,串口沒來的及發送之前的數據,新的數據又來了,所以會丟失。

verilog數據發送方法:數據更新和發送標志同時更新,下個時刻發送標志關閉,可以保證數據發送一次且發送正確。

連續賦值情況避免:在verilog中,一定要注意連續賦值,可能會出現數據更新不及時的情況。導致這種情況的原因是非阻塞性賦值,數據會在結束后更新數據。舉例如下:會導致地址沒有生效,發送暫存字節會拿到一個不是上面計算出地址的數據。

address <= spi_recv_data[6:1]; // 取接收地址; send_byte_temp <= time_register[address ]; // 發送數據更新 spi_send_status <= 1'd1; // 啟動發送 st_done <= 1'b1; // 該狀態下處理完畢

注意信號的同時性 :比如賦值和啟動同時進行。

begin…end語句之間連續多條語句給某個寄存器賦值:盡量避免這種寫法,可能會導致不可預知的錯誤。

FPGA 引腳模式:如果選擇LVCOMS可能會報警告,警告不能消除。

verilog 清0操作:清零操作可能會有中間值,可能會觸發‘>’或‘<’號。

統一條件下不要對某個變量多次賦值 : 這樣最后讓邏輯變得混亂。例如下,在一個begin 里面,多次對ctrl_reg_temp賦值。
#

NIOS II 是什么?

NIOS II 是FPGA 把沒有利用的邏輯單元做成了一個小的MCU單元,從而不需要再外接一個MCU。NIOS 核調用各個IP核。

IP軟核是什么

IP軟核是altera 已經定義好的邏輯塊,省的自己浪費時間寫了,如PLL IP核,USART IP 核,定時器IP核,SDRAM IP核等。

總結

以上是生活随笔為你收集整理的CPLD调试记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。