加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 仿真 
    • 二、模塊仿真
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

基于FPGA的直接擴(kuò)頻通信系統(tǒng)設(shè)計(附主要代碼)

2022/01/17
621
閱讀需 11 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大俠好,歡迎來到FPGA技術(shù)江湖,江湖偌大,相見即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。

今天給大俠帶來直接擴(kuò)頻通信,由于篇幅較長,分三篇。今天帶來下篇,也是最后一篇,仿真,話不多說,上貨。

這里也給出前兩篇的超鏈接:

直接擴(kuò)頻通信(上)理論基礎(chǔ)

直接擴(kuò)頻通信(中)Verilog 實現(xiàn)

本篇適用于有一定通信基礎(chǔ)的大俠,本篇使用的理論不僅僅是擴(kuò)頻通信。為了便于學(xué)習(xí),本章將會以實戰(zhàn)的方式,對整個工程的仿真。并對一些關(guān)鍵的仿真結(jié)果進(jìn)行說明。各位大俠可依據(jù)自己的需要進(jìn)行閱讀,參考學(xué)習(xí)。

第三篇內(nèi)容摘要:本篇會介紹系統(tǒng)的仿真設(shè)計。

仿真 

一、模塊的建立及其仿真環(huán)境的生成

1.1、在計算機(jī)上,找一個沒有中文字符的目錄,新建以下幾個文件,如圖 6:

圖6

 

上圖為可以建立的文件,sim_wave.do 是仿真波形保存文件.tt.do。其代碼如下:

#建立 library 名為”work”vlib workvmap work work#編譯當(dāng)前目錄(./)中的 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

以上是輸入方式進(jìn)行仿真,也可以直接使用圖形化的方式進(jìn)行仿真。但沒有開始仿真,因為我們以下還要添加一條語句。但沒有響應(yīng)的文件。tt.bat 的代碼如下:

echopausevsim -do .tt.dopause

tt.bat 文件為批處理文件,僅為打開 modelsim、運行 tt.do 文件使用。也可以不使用該文件(以下不會詳細(xì)介紹)。

1.2、將對應(yīng)的代碼寫到相應(yīng)的文件中(sim_wave.do、tt.bat 文件可以不管)。

1.3、用 modelsim 的打開方式打開 top.v 文件(或者你先打開 modelsim,然后把目錄修改成以上所述的目錄也可)。運行的界面如圖 7(modelsim6.5d):

圖7

圖中的亂碼均為modelsim不兼容我所使用的notepad軟件編寫的中文字符,大俠均可不以理睬。

1.4、在 Transcript 中輸入”do tt.do”,運行當(dāng)前目錄下的 tt.do 文件。運行過程中,最后跳出如圖 8 的窗口。如果有錯誤,會在 Transcript 中用紅色字體說明(當(dāng)然,這里都是英文)。

圖8

在框圖 1 中為整個仿真平臺上的模型,可以點擊模型+展開??驁D 2 顯示當(dāng)前模型所含的項目。

1.5、添加波形,如圖 9、10、11,對模塊 coder 添加波形,并對波形進(jìn)行分組。

圖9

 

圖10

圖11

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

圖12

圖13

1.6、仿真開始 在 Transcript 中輸入”run -all” 等待結(jié)果。以上將生成仿真環(huán)境的全過程。下面會將對各個模塊進(jìn)行說明。

二、模塊仿真

2.1、模塊 mcu 仿真

mcu 扮演一個信源產(chǎn)生模塊,其波形如圖 14。

圖14

在 send_ena 使能的情況下,當(dāng) insourse_ena 為高時,數(shù)據(jù)從 indatabyte 第 7 位端口輸出到 coder 模塊,圖中發(fā)送十六進(jìn)制 24 的過程,僅在 insourse_ena 為高時發(fā)送。該模塊還產(chǎn)生兩個時鐘,兩個時鐘分別是 31 倍的頻率。clk1 和 clk31。

2.2、模塊 coder 仿真

模塊 coder 將對 mcu 傳送的數(shù)據(jù)進(jìn)行編碼、擴(kuò)頻。仿真波形如圖 15。

圖15

圖中的 in_data_buf 為發(fā)送碼,當(dāng)接收到 send_ena 后,先發(fā)送頭和數(shù)據(jù)幀,然后才發(fā)送數(shù)據(jù)如圖中從 133600us 開始發(fā)送數(shù)據(jù)”0010”(十六進(jìn)制 2)后發(fā)送監(jiān)督碼的”101”,在 177000us 開始發(fā)送數(shù)據(jù)”0100”(十六進(jìn)制 4)后發(fā)送監(jiān)督碼”110”。所有數(shù)據(jù)經(jīng)過信道編碼后,out_data 發(fā)送出去。

2.3、模塊 noise 仿真

添加干擾,經(jīng) coder 發(fā)送的 2bit 數(shù)據(jù)擴(kuò)展到 3bit 數(shù)據(jù),并與噪聲進(jìn)行加性。

仿真波形如圖 16。

圖16

圖中是對 1bit 數(shù)據(jù)進(jìn)行擴(kuò)頻后,其中 un_noised_data 為輸入數(shù)據(jù)(無噪聲)、經(jīng)過與 noise 數(shù)據(jù)相加,得到數(shù)據(jù) noised_data。這模塊就是充當(dāng)信道中的加性干擾源。

2.4、模塊 decoder 仿真

解擴(kuò)是本系統(tǒng)的設(shè)計重點。它包含同步頭的同步和數(shù)據(jù)的接收等。

本設(shè)計采用一個循環(huán)偽隨機(jī)作為解擴(kuò)碼。采用一個 31bit 的寄存器,初始化為級數(shù)為 5 的 m 序列,首尾循環(huán)。那么,在寄存器每一位上采數(shù),都可以得到一個偽隨機(jī)序列。分別得出 31 個 m 序列。而且靠近的寄存器位,采集的 m 序列只有一位的移位。因此,可以采用該方法,在發(fā)送端發(fā)送的數(shù)據(jù),不管為何時發(fā)送,在 31bit個寄存器中的 1 個寄存器中與之對應(yīng)。更通俗的說法,不管發(fā)送設(shè)備何時開始發(fā)送。都可以在 31bit 的寄存器中找到一個寄存器采到的 m 序列與之對應(yīng)。

由于在 31 比特的寄存器同時采數(shù)是比較耗費 FPGA 內(nèi)部資源,所以本設(shè)計采用寄存器的每 10 個 bit 位進(jìn)行一一處理。如果前 10 個沒能找到對應(yīng)的 m 序列,則累加到后 10 個,以此類推,在 3 次的累加中,總能完全掃描完 31bit 位的寄存器。此時可以找到對應(yīng)的比特位。

由于發(fā)送設(shè)備的數(shù)據(jù)頭為 10 個”1”和 1 個”0”,而在 10 個”1”中的 1 是延伸的,沒法直接得到相鄰”1”的交界,而在得到合適的 m 序列位后,必須進(jìn)行同步,同步的方法為采集最后一個”0”作為同步。

在接收完成數(shù)據(jù)頭后,進(jìn)行數(shù)據(jù)幀同步。數(shù)據(jù)幀是 4bit 數(shù)據(jù)”0000”和 3bit 監(jiān)督位”000”。

接收完成數(shù)據(jù)幀之后才是數(shù)據(jù)的開始。由于數(shù)據(jù)比較大,累加基數(shù)這里是 100,閥值為 30,那么,當(dāng)接收到 130,說明接收到一個”1”。

仿真結(jié)果如下:

圖17

圖17 為接收的整體工作狀態(tài),sum1~sum10 分別采集 10 個寄存器比特位,當(dāng)有1 個接收超過 130,說明寄存器該為上的 m 序列可以接收到 1 個”1”,sum 是對數(shù)據(jù)幀和數(shù)據(jù)的解擴(kuò)統(tǒng)計。

圖18

圖18 是一個完整數(shù)據(jù)解擴(kuò)的過程,clk31 是采集時鐘,數(shù)據(jù)為 in_data_buf,從輸入到輸出,延遲一段時間后傳送到解擴(kuò)模塊。psumi 為解擴(kuò)的值,通過累加得到sum(in_data[2]判斷。為 1,則加;為 0,則減)。如果 sum 超過 130,說明發(fā)送數(shù)據(jù)為”1”,否則為”0”。(以上為數(shù)據(jù)”1”的例子)

通過解擴(kuò)的數(shù)據(jù),送到 correct 模塊進(jìn)行糾錯。

2.5、模塊 correct 仿真

模塊 correct 為糾錯模塊。它將解擴(kuò)后的數(shù)據(jù)進(jìn)行分析,即對漢明碼的反運算。該模塊的仿真過程省略。

2.6、模塊 Slaver 仿真

Slaver 是接收模塊端,它將解擴(kuò)、糾錯后的數(shù)據(jù)進(jìn)行存儲。仿真過程省略。

2.7、模塊 Top  仿真

Top 模塊應(yīng)該放第一塊講解,因為它是一個仿真平臺,它的子模塊包括 mcu 和slaver。它將兩個模塊的發(fā)送接收進(jìn)行統(tǒng)計、并且進(jìn)行計算、輸出,并對模塊參數(shù)設(shè)置。以下設(shè)置發(fā)送數(shù)據(jù)比特位為 500 的輸出結(jié)果(圖 19、圖 20):

圖19

圖20

以上是整個設(shè)計的仿真過程。

本篇到此結(jié)束,直接擴(kuò)頻通信也到此結(jié)束,各位大俠,有緣再見!

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

任何技術(shù)的學(xué)習(xí)就好比一個江湖,對于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。