導(dǎo)讀
本篇適用于有一定通信基礎(chǔ)的大俠,本篇使用的理論不僅僅是擴(kuò)頻通信。為了便于學(xué)習(xí),本章將會(huì)以實(shí)戰(zhàn)的方式,對(duì)整個(gè)工程的仿真。并對(duì)一些關(guān)鍵的仿真結(jié)果進(jìn)行說明。各位大俠可依據(jù)自己的需要進(jìn)行閱讀,參考學(xué)習(xí)。
第三篇內(nèi)容摘要:本篇會(huì)介紹系統(tǒng)的仿真設(shè)計(jì)。
仿真
一、模塊的建立及其仿真環(huán)境的生成
1.1、在計(jì)算機(jī)上,找一個(gè)沒有中文字符的目錄,新建以下幾個(gè)文件:
可以建立的文件,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àn)槲覀円韵逻€要添加一條語句。但沒有響應(yīng)的文件。tt.bat 的代碼如下:
echopausevsim -do 。 t.dopause
tt.bat 文件為批處理文件,僅為打開 modelsim、運(yùn)行 tt.do 文件使用。也可以不使用該文件(以下不會(huì)詳細(xì)介紹)。
1.2、將對(duì)應(yīng)的代碼寫到相應(yīng)的文件中(sim_wave.do、tt.bat 文件可以不管)。
1.3、用 modelsim 的打開方式打開 top.v 文件(或者你先打開 modelsim,然后把目錄修改成以上所述的目錄也可)。運(yùn)行的界面如圖 7(modelsim6.5d):
圖中的亂碼均為modelsim不兼容我所使用的notepad軟件編寫的中文字符,大俠均可不以理睬。
1.4、在 Transcript 中輸入”do tt.do”,運(yùn)行當(dāng)前目錄下的 tt.do 文件。運(yùn)行過程中,最后跳出如圖 8 的窗口。如果有錯(cuò)誤,會(huì)在 Transcript 中用紅色字體說明(當(dāng)然,這里都是英文)。
圖8
在框圖 1 中為整個(gè)仿真平臺(tái)上的模型,可以點(diǎn)擊模型+展開。框圖 2 顯示當(dāng)前模型所含的項(xiàng)目。
1.5、添加波形,如圖10、11,對(duì)模塊 coder 添加波形,并對(duì)波形進(jìn)行分組。
圖10
圖11
對(duì)所有仿真模型添加波形,并且分組,如圖 12。
圖12
1.6、仿真開始 在 Transcript 中輸入”run -all” 等待結(jié)果。以上將生成仿真環(huán)境的全過程。下面會(huì)將對(duì)各個(gè)模塊進(jìn)行說明。
二、模塊仿真
2.1、模塊 mcu 仿真
mcu 扮演一個(gè)信源產(chǎn)生模塊。
在 send_ena 使能的情況下,當(dāng) insourse_ena 為高時(shí),數(shù)據(jù)從 indatabyte 第 7 位端口輸出到 coder 模塊,圖中發(fā)送十六進(jìn)制 24 的過程,僅在 insourse_ena 為高時(shí)發(fā)送。該模塊還產(chǎn)生兩個(gè)時(shí)鐘,兩個(gè)時(shí)鐘分別是 31 倍的頻率。clk1 和 clk31。
2.2、模塊 coder 仿真
模塊 coder 將對(duì) mcu 傳送的數(shù)據(jù)進(jìn)行編碼、擴(kuò)頻。
圖中的 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)行加性。
圖中是對(duì) 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è)計(jì)重點(diǎn)。它包含同步頭的同步和數(shù)據(jù)的接收等。
本設(shè)計(jì)采用一個(gè)循環(huán)偽隨機(jī)作為解擴(kuò)碼。采用一個(gè) 31bit 的寄存器,初始化為級(jí)數(shù)為 5 的 m 序列,首尾循環(huán)。那么,在寄存器每一位上采數(shù),都可以得到一個(gè)偽隨機(jī)序列。分別得出 31 個(gè) m 序列。而且靠近的寄存器位,采集的 m 序列只有一位的移位。因此,可以采用該方法,在發(fā)送端發(fā)送的數(shù)據(jù),不管為何時(shí)發(fā)送,在 31bit個(gè)寄存器中的 1 個(gè)寄存器中與之對(duì)應(yīng)。更通俗的說法,不管發(fā)送設(shè)備何時(shí)開始發(fā)送。都可以在 31bit 的寄存器中找到一個(gè)寄存器采到的 m 序列與之對(duì)應(yīng)。
由于在 31 比特的寄存器同時(shí)采數(shù)是比較耗費(fèi) FPGA 內(nèi)部資源,所以本設(shè)計(jì)采用寄存器的每 10 個(gè) bit 位進(jìn)行一一處理。如果前 10 個(gè)沒能找到對(duì)應(yīng)的 m 序列,則累加到后 10 個(gè),以此類推,在 3 次的累加中,總能完全掃描完 31bit 位的寄存器。此時(shí)可以找到對(duì)應(yīng)的比特位。
由于發(fā)送設(shè)備的數(shù)據(jù)頭為 10 個(gè)”1”和 1 個(gè)”0”,而在 10 個(gè)”1”中的 1 是延伸的,沒法直接得到相鄰”1”的交界,而在得到合適的 m 序列位后,必須進(jìn)行同步,同步的方法為采集最后一個(gè)”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,說明接收到一個(gè)”1”。
接收的整體工作狀態(tài),sum1~sum10 分別采集 10 個(gè)寄存器比特位,當(dāng)有1 個(gè)接收超過 130,說明寄存器該為上的 m 序列可以接收到 1 個(gè)”1”,sum 是對(duì)數(shù)據(jù)幀和數(shù)據(jù)的解擴(kuò)統(tǒng)計(jì)。
一個(gè)完整數(shù)據(jù)解擴(kuò)的過程,clk31 是采集時(shí)鐘,數(shù)據(jù)為 in_data_buf,從輸入到輸出,延遲一段時(shí)間后傳送到解擴(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)行糾錯(cuò)。
2.5、模塊 correct 仿真
模塊 correct 為糾錯(cuò)模塊。它將解擴(kuò)后的數(shù)據(jù)進(jìn)行分析,即對(duì)漢明碼的反運(yùn)算。該模塊的仿真過程省略。
2.6、模塊 Slaver 仿真
Slaver 是接收模塊端,它將解擴(kuò)、糾錯(cuò)后的數(shù)據(jù)進(jìn)行存儲(chǔ)。仿真過程省略。
2.7、模塊 Top 仿真
Top 模塊應(yīng)該放第一塊講解,因?yàn)樗且粋€(gè)仿真平臺(tái),它的子模塊包括 mcu 和slaver。它將兩個(gè)模塊的發(fā)送接收進(jìn)行統(tǒng)計(jì)、并且進(jìn)行計(jì)算、輸出,并對(duì)模塊參數(shù)設(shè)置。以下設(shè)置發(fā)送數(shù)據(jù)比特位為 500 的輸出結(jié)果(圖 19、圖 20):
圖19
圖20
以上是整個(gè)設(shè)計(jì)的仿真過程。
本篇到此結(jié)束,直接擴(kuò)頻通信也到此結(jié)束,各位大俠,有緣再見!
編輯:jq
-
寄存器
+關(guān)注
關(guān)注
31文章
5362瀏覽量
120900 -
仿真
+關(guān)注
關(guān)注
50文章
4120瀏覽量
133851 -
代碼
+關(guān)注
關(guān)注
30文章
4818瀏覽量
68873
原文標(biāo)題:原創(chuàng)系統(tǒng)設(shè)計(jì)精選 | 基于FPGA的直接擴(kuò)頻通信系統(tǒng)設(shè)計(jì)(附代碼)
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論