"歡迎各位大佬在評論區(qū)發(fā)表你們的調試問題與解決方式"
一、Vivado報錯
【labtools 27-3403】
原因:JTAG頻率過高。
解決:連接調試器時降低JTAG頻率。
【DRC REQP-1619】
原因:沒接管腳,造成沒有IOB來驅動GT。
【DRC REQP-1712】
輸入信號clk不是來自普通的單端時鐘信號。
解決:
方法1.IP核中將PLL的clk_in1的source參數(shù)修改為Global buffer。
方法2.修改Compensation:The Clocking Wizard-> Re-custom IP->PLLE2 Settings tab->“Allow Override Mode” check->Compensation set to BUF_IN.
方法3.PLL --> MMCM
二、硬件調試
RS233、SPI等串口數(shù)據(jù)傳輸問題:
1.波特率不匹配、時鐘頻率不匹配。
2.RX、TX接反。
3.發(fā)送端與接收端未共地。
4.數(shù)據(jù)大小端
5.命令間隔時間太短
6.協(xié)議錯誤
7.需要先輸入密碼再發(fā)控制指令(真的是有毒,艸)
三、IP coe配置
rom:
memory_initialization_radix=16; %進制格式 (去掉注釋)
memory_initialization_vector= %初始化后的數(shù)值
xx,
xx;
fir: 濾波器系數(shù)需要歸一化到最大值(16位歸一化到 [±2^15)),不然帶外的抑制能力會降低。
Radix = 16;
Coefficient_Width = 16;
CoefData =
7fff,
0007; % 16進制前面需要補0(去掉注釋)
四、程序調試
1、200MHz時鐘5ns的時鐘周期控制信號定時發(fā)射時,需要將樣點數(shù)據(jù)(200MHz時鐘2x2相數(shù)據(jù),2x32位)從200M的時鐘域同步到100M的SerDes傳輸時鐘域(100MHz時鐘1x4相數(shù)據(jù),1x64位),會造成時間刻度從5ns增加到了10ns。通過移動一個樣點的方式可以將時間刻度恢復到5ns。
2、FPGA在軟件打開后工作異常,調試器抓取時顯示未找到時鐘。原因是打開軟件后將時鐘切換為了外參考時鐘,而外參考時鐘不穩(wěn)定造成時鐘無法鎖定,F(xiàn)PGA無工作時鐘無法工作。需要自適應時鐘在外參考時鐘無法鎖定時自動切換為內參考時鐘。
3、算法實現(xiàn)時先在matlab中進行仿真,再使用verilog編寫算法,再將verilog的實現(xiàn)步驟在matlab中實現(xiàn),對比仿真的結果,結果完全匹配后再進行實現(xiàn)。對比時將verilog仿真結果的數(shù)據(jù)保存后導入到matlab中進行分析。
4、dds輸出的頻率不精確時需要頻偏校正,比如驅動時鐘是204.8MHz需要產生1MHz的正弦波形時如果相位的精度是32位,則每個時鐘的相位增量就是(1M/204.8M)*(2^32) = 20,971,520 是一個整數(shù),dds產生的正弦波頻率為1MHz。如果驅動時鐘是200MHz要產生1MHz的正弦波,則每個時鐘的相位增量就是1/200*2^32=21,474,836.48 是一個小數(shù),此時相位增量只能設置為21,474,836就會造成產生的正弦波頻率約為0.9999999776MHz。此時就需要將丟失0.48的相位補償回來補償?shù)闹芷跒?.48與1的最小公倍數(shù)25(0.48*25=1*12),也就是第25時鐘時相位的增量21,474,8367+12 (21,474,836.48*25==21,474,836*24+21,474,848*1)。
5、PCIE鏈路偶爾掉鏈邏輯無問題。
電源問題:In the TRD demonstration section connect an external 12V wall power supply to the board instead of the ATX power supply.
主機已經建鏈完成不再與FPGA建鏈:The FPGA configuration time on the board is large and does not meet the PCIe specification. By the time the FPGA configures, PCIe enumeration on the host system is complete.
6.empty控制讀信號會使fifo多讀出數(shù)據(jù),需要使用prog_empty來控制讀信號,或者使用組合邏輯來控制讀信號。注意rom、ram、fifo讀出數(shù)據(jù)需要幾個時鐘。
7.烤機后上位機使用卡頓,采集卡傳輸數(shù)據(jù)丟包,內存條損壞。
8.i<NUM 或 i<=NUM-1 寫成 i<NUM-1。
9.截位造成數(shù)據(jù)溢出。自適應截位。統(tǒng)計一段時間內最高有效位的數(shù)量來控制截位的窗口。
10.iq數(shù)據(jù)錯位或者搞反。
11.接口名稱寄存器名稱,要差異化防止搞混接錯增加試錯成本。
12.充分利用ready 與 valid信號在模塊間數(shù)據(jù)交互的控制,防止不必要的丟數(shù),多讀。
13.數(shù)據(jù)輸入有效要與時鐘匹配,例如IP核數(shù)據(jù)速率是100M,時鐘速率是200M,則輸入到IP核的數(shù)據(jù)不能連續(xù)輸入,需要前級緩存一下,每兩個時鐘輸入一個數(shù)據(jù),如果有ready信號,則ready有效時開始更新輸入。文章來源:http://www.zghlxwxcb.cn/news/detail-620813.html
14.數(shù)據(jù)直接截位會引入直流。截位需要四舍五入。文章來源地址http://www.zghlxwxcb.cn/news/detail-620813.html
always @(posedge clk, negedge rst_n) begin
if(!rst_n) begin
carry <= 1'b0;
round <= 16'd0;
dat_cut <= 16'd0;
end else begin
carry <= dat[23] ? dat[7]&(|dat[6:2]) : dat[7];
round <= dat[23:8];
dat_cut <= round + carry;
end
end
到了這里,關于FPGA調試問題記錄(軟件無線電)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!