導讀
本篇適用于有一定通信基礎的大俠,本篇使用的理論不僅僅是擴頻通信。為了便于學習,本章將會以實戰(zhàn)的方式,對整個工程的仿真。并對一些關鍵的仿真結果進行說明。各位大俠可依據(jù)自己的需要進行閱讀,參考學習。
第三篇內(nèi)容摘要:本篇會介紹系統(tǒng)的仿真設計。
仿真
一、模塊的建立及其仿真環(huán)境的生成
1.1、在計算機上,找一個沒有中文字符的目錄,新建以下幾個文件:
可以建立的文件,sim_wave.do 是仿真波形保存文件.tt.do。其代碼如下:
#建立 library 名為”work”vlib workvmap work work#編譯當前目錄(。/)中的 top.v、mcu.v …。 vlog -work work -L mtiAvm -L mtiOvm -L mtiUPF 。/top.vvlog -work work -L mtiAvm -L mtiOvm -L mtiUPF 。/mcu.vvlog -work work -L mtiAvm -L mtiOvm -L mtiUPF 。/slaver.vvlog -work work -L mtiAvm -L mtiOvm -L mtiUPF 。/coder.vvlog -work work -L mtiAvm -L mtiOvm -L mtiUPF 。/add_noise.vvlog -work work -L mtiAvm -L mtiOvm -L mtiUPF 。/decoder.vvlog -work work -L mtiAvm -L mtiOvm -L mtiUPF 。/correct.vvlog -work work -L mtiAvm -L mtiOvm -L mtiUPF 。/Correct_Decoder.v#仿真 work 中的 top 模型vsim -novopt work.top
以上是輸入方式進行仿真,也可以直接使用圖形化的方式進行仿真。但沒有開始仿真,因為我們以下還要添加一條語句。但沒有響應的文件。tt.bat 的代碼如下:
echopausevsim -do 。 t.dopause
tt.bat 文件為批處理文件,僅為打開 modelsim、運行 tt.do 文件使用。也可以不使用該文件(以下不會詳細介紹)。
1.2、將對應的代碼寫到相應的文件中(sim_wave.do、tt.bat 文件可以不管)。
1.3、用 modelsim 的打開方式打開 top.v 文件(或者你先打開 modelsim,然后把目錄修改成以上所述的目錄也可)。運行的界面如圖 7(modelsim6.5d):

圖中的亂碼均為modelsim不兼容我所使用的notepad軟件編寫的中文字符,大俠均可不以理睬。
1.4、在 Transcript 中輸入”do tt.do”,運行當前目錄下的 tt.do 文件。運行過程中,最后跳出如圖 8 的窗口。如果有錯誤,會在 Transcript 中用紅色字體說明(當然,這里都是英文)。

圖8
在框圖 1 中為整個仿真平臺上的模型,可以點擊模型+展開。框圖 2 顯示當前模型所含的項目。
1.5、添加波形,如圖10、11,對模塊 coder 添加波形,并對波形進行分組。

圖10

圖11
對所有仿真模型添加波形,并且分組,如圖 12。

圖12
1.6、仿真開始 在 Transcript 中輸入”run -all” 等待結果。以上將生成仿真環(huán)境的全過程。下面會將對各個模塊進行說明。
二、模塊仿真
2.1、模塊 mcu 仿真
mcu 扮演一個信源產(chǎn)生模塊。
在 send_ena 使能的情況下,當 insourse_ena 為高時,數(shù)據(jù)從 indatabyte 第 7 位端口輸出到 coder 模塊,圖中發(fā)送十六進制 24 的過程,僅在 insourse_ena 為高時發(fā)送。該模塊還產(chǎn)生兩個時鐘,兩個時鐘分別是 31 倍的頻率。clk1 和 clk31。
2.2、模塊 coder 仿真
模塊 coder 將對 mcu 傳送的數(shù)據(jù)進行編碼、擴頻。
圖中的 in_data_buf 為發(fā)送碼,當接收到 send_ena 后,先發(fā)送頭和數(shù)據(jù)幀,然后才發(fā)送數(shù)據(jù)如圖中從 133600us 開始發(fā)送數(shù)據(jù)”0010”(十六進制 2)后發(fā)送監(jiān)督碼的”101”,在 177000us 開始發(fā)送數(shù)據(jù)”0100”(十六進制 4)后發(fā)送監(jiān)督碼”110”。所有數(shù)據(jù)經(jīng)過信道編碼后,out_data 發(fā)送出去。
2.3、模塊 noise 仿真
添加干擾,經(jīng) coder 發(fā)送的 2bit 數(shù)據(jù)擴展到 3bit 數(shù)據(jù),并與噪聲進行加性。
圖中是對 1bit 數(shù)據(jù)進行擴頻后,其中 un_noised_data 為輸入數(shù)據(jù)(無噪聲)、經(jīng)過與 noise 數(shù)據(jù)相加,得到數(shù)據(jù) noised_data。這模塊就是充當信道中的加性干擾源。
2.4、模塊 decoder 仿真
解擴是本系統(tǒng)的設計重點。它包含同步頭的同步和數(shù)據(jù)的接收等。
本設計采用一個循環(huán)偽隨機作為解擴碼。采用一個 31bit 的寄存器,初始化為級數(shù)為 5 的 m 序列,首尾循環(huán)。那么,在寄存器每一位上采數(shù),都可以得到一個偽隨機序列。分別得出 31 個 m 序列。而且靠近的寄存器位,采集的 m 序列只有一位的移位。因此,可以采用該方法,在發(fā)送端發(fā)送的數(shù)據(jù),不管為何時發(fā)送,在 31bit個寄存器中的 1 個寄存器中與之對應。更通俗的說法,不管發(fā)送設備何時開始發(fā)送。都可以在 31bit 的寄存器中找到一個寄存器采到的 m 序列與之對應。
由于在 31 比特的寄存器同時采數(shù)是比較耗費 FPGA 內(nèi)部資源,所以本設計采用寄存器的每 10 個 bit 位進行一一處理。如果前 10 個沒能找到對應的 m 序列,則累加到后 10 個,以此類推,在 3 次的累加中,總能完全掃描完 31bit 位的寄存器。此時可以找到對應的比特位。
由于發(fā)送設備的數(shù)據(jù)頭為 10 個”1”和 1 個”0”,而在 10 個”1”中的 1 是延伸的,沒法直接得到相鄰”1”的交界,而在得到合適的 m 序列位后,必須進行同步,同步的方法為采集最后一個”0”作為同步。
在接收完成數(shù)據(jù)頭后,進行數(shù)據(jù)幀同步。數(shù)據(jù)幀是 4bit 數(shù)據(jù)”0000”和 3bit 監(jiān)督位”000”。
接收完成數(shù)據(jù)幀之后才是數(shù)據(jù)的開始。由于數(shù)據(jù)比較大,累加基數(shù)這里是 100,閥值為 30,那么,當接收到 130,說明接收到一個”1”。
接收的整體工作狀態(tài),sum1~sum10 分別采集 10 個寄存器比特位,當有1 個接收超過 130,說明寄存器該為上的 m 序列可以接收到 1 個”1”,sum 是對數(shù)據(jù)幀和數(shù)據(jù)的解擴統(tǒng)計。
一個完整數(shù)據(jù)解擴的過程,clk31 是采集時鐘,數(shù)據(jù)為 in_data_buf,從輸入到輸出,延遲一段時間后傳送到解擴模塊。psumi 為解擴的值,通過累加得到sum(in_data[2]判斷。為 1,則加;為 0,則減)。如果 sum 超過 130,說明發(fā)送數(shù)據(jù)為”1”,否則為”0”。(以上為數(shù)據(jù)”1”的例子)
通過解擴的數(shù)據(jù),送到 correct 模塊進行糾錯。
2.5、模塊 correct 仿真
模塊 correct 為糾錯模塊。它將解擴后的數(shù)據(jù)進行分析,即對漢明碼的反運算。該模塊的仿真過程省略。
2.6、模塊 Slaver 仿真
Slaver 是接收模塊端,它將解擴、糾錯后的數(shù)據(jù)進行存儲。仿真過程省略。
2.7、模塊 Top 仿真
Top 模塊應該放第一塊講解,因為它是一個仿真平臺,它的子模塊包括 mcu 和slaver。它將兩個模塊的發(fā)送接收進行統(tǒng)計、并且進行計算、輸出,并對模塊參數(shù)設置。以下設置發(fā)送數(shù)據(jù)比特位為 500 的輸出結果(圖 19、圖 20):

圖19

圖20
以上是整個設計的仿真過程。
本篇到此結束,直接擴頻通信也到此結束,各位大俠,有緣再見!
編輯:jq
-
寄存器
+關注
關注
31文章
5619瀏覽量
130391 -
仿真
+關注
關注
55文章
4533瀏覽量
138652 -
代碼
+關注
關注
30文章
4976瀏覽量
74359
原文標題:原創(chuàng)系統(tǒng)設計精選 | 基于FPGA的直接擴頻通信系統(tǒng)設計(附代碼)
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
請教:6G 確定性通信原型驗證,FPGA+SDR 方案該怎么搭?
芯源CW32W031射頻系統(tǒng)介紹
遠距離無線芯動力,穿透干擾穩(wěn)連接——深入解讀LoRa擴頻技術
LoRa擴頻技術應用
DSP、FPGA之間SRIO通信的問題?
Xilinx FPGA串行通信協(xié)議介紹
如何使用FPGA實現(xiàn)SRIO通信協(xié)議
基于FPGA開發(fā)板TSP的串口通信設計
基于FPGA開發(fā)板DE23-Lite的串口通信設計
云翎智能林場應急通信自組網(wǎng):從災前預警到災后重建的全周期應用
MAX13253ATB+T 1A、擴頻、推挽式變壓器驅(qū)動器,用于隔離電源
是否有關于如何通過 I2C 總線上的 uProcessor 或 FPGA 與芯片通信的文檔?
RK3576+紫光同創(chuàng)FPGA并口通信方案 基于DSMC/FlexBus并口的RK3576J與FPGA通信方案
關于FPGA的直接擴頻通信系統(tǒng)設計
評論