2.硬件部分
2.1地址逻辑的设计
用了VHDL语言仿真了地址逻辑的产生电路。 VHDL语言的代码如下:
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity GMSK is port(
clk:in std_logic; data:out std_logic; A3:out std_logic; A4:out std_logic; A5:out std_logic; A6:out std_logic; A7:out std_logic; A8:out std_logic; A9:out std_logic; A10:out std_logic; A11:out std_logic; A12:out std_logic ); end GMSK;
architecture address of GMSK is signal count_4:integer range 0 to 1; signal clk_2:std_logic; signal clk_4:std_logic;
signal b1,b2,b3,b4,b5,b6:std_logic; signal add_count:integer range 0 to 3; signal m:std_logic_vector(6 downto 0); begin process(clk) begin
if(clk'event and clk='1') then
m<=(m(5 downto 0)&(m(4) xor m(0) xor(not(m(6)or m(5)or m(4)or m(3)or m(2)or m(1)or m(0))))); --生成m序列 k=7
clk_2<=not clk_2; --二分频
if(count_4=1) then --四分频
clk_4<=not clk_4; count_4<=0; else
count_4<=count_4+1;
end if;
b1<=m(0); b2<=b1; b3<=b2; b4<=b3; b5<=b4; b6<=b5; if(b6='1') then
add_count<=add_count+1; else
add_count<=add_count-1; end if;
case add_count is --象限数决定A6、A7
when 0=>A6<='0';A7<='0'; when 1=>A6<='1';A7<='0'; when 2=>A6<='0';A7<='1'; when 3=>A6<='1';A7<='1'; end case;
end if; end process; data<=b3; A3<=clk_4; A4<=clk_2; A5<=clk; A8<=b1; A9<=b2; A10<=b3; A11<=b4; A12<=b5; end address;
本来打算用元件连接成图来做出地址逻辑,可是觉得用VHDL语言编程实现更有挑战性,就用了VHDL语言,起初感觉m序列的产生太难了,后来在以前的数电书上好好看了m序列的产生电路,就解决了。由于只是分析地址逻辑,就没有加如预编码等部分。
2.2地址逻辑的仿真设计波形
图四为地址逻辑的仿真设计波形:
图表 4 地址逻辑的仿真设计波形
A3,A4,A5是时钟的分频,A6、A7代表的是L,它主要以在0-3内的递增或递减或0突变为3突变为0,而A8、A9、A10、A11、A12代表的是移位寄存器的五位信息码,A12、A11、A10、A9都分别是其下一个延时之后的结果,而data是m伪随机序列。
三、实验心得
这次我的课程设计选择了韩老师的GMSK实验,起初的动因是想在学期内结束课设,把假期的时间更多地用于考研,而且随大流地去做通原课上公布的课设,对待的态度肯定不会有这次这么认真,如果浪费了课设这一锻炼的机会,大学就里没有几次让我们动手的机会了。
刚开始接触这个实验,感觉很难理解。我是五一以后才开始的,有这门实验课程的同学甚至都有验收了的,给我很大压力,听说韩老师比较注重独立思考的能力,这让我化压力为动力,连续几天都看GMSK相关的资料。终于懂了实验让我做什么!
开始编程就比较顺利了,matlab我已在通原实验课上刚刚学过,用起来很顺手。在看了资料后,我稍稍改动了一下实验做法,把ROM表直接写成1×1024的矩阵,这样0-1023对应与10比特的地址,思路清晰了很多。
在积分计算时,我选择了cumtrapz函数,它通过计算曲线与x轴之间的面积来计算积分,我对积分理解就是这样,所以编程的思路就很清晰,很顺利的做出ROM表。
眼图的仿真,起初在处理时没区分好单极性和双极性码在应用场合,出了错误。后来从头检查,发现了这个错误。眼图出来以后,很有成就感。对这个实验的理解加强了很多。
量化和生成BIN文件起初以为很难,但是好好做了后,感觉只要前面的程序用心编了,这里会很轻松就突破,只是知道fwrite函数的用法,再结合本次要生成的BIN文件的结构特点,很容易出来。那天晚上来验收的同学很多,第一次纯粹没有任何波形,检查发现是每个数据间插入7个0的循环语句有了一个出了很低级的错误,修改后就成功了。
最后的地址逻辑的产生,做这个的时候同宿舍的多半同学在做电子设计大赛,好几个人都是负责编VHDL的,这激发了我对VHDL的兴趣,找出以前的数电实验课本,就自己编了起来,m序列的产生很长时间没出来,后来好好看了数电书上的m序列产生电路,用了一句代码就出来了。仿真出地址逻辑的波形,对实验的理解就更加深了一步。
总结实验,明白了GMSK调制器在工程的实现原理,原本以为就像通原课本的框图上那样信号通过高斯滤波器,再去MSK调制,这样的话会用许多模拟器件,而且精度很难保证,设备的成本会很高。而像这样提前算好数据写入ROM,需要用地址去读取,方便快捷,精度高。这个思路对工程开发很有用,亲自完整地实现一遍后,更感觉收获颇多,感觉这次课设没有白做。
最后感谢韩老师在带实验课和组织电子设计大赛的百忙时间里给我完成这回的课程设计的机会,谢谢您的辅导!