基于FPGA的VHDL语言m序列生成详解+源码
VHDL源代码

VHDL源代码:library ieee; --显示器彩条发生器use VGA isport(clk,mode :in std_logic; --扫描时钟/显示模式选择时钟d,hs,vs,r,g,b:out std_logic); --行,场同步/红,绿,蓝end VGA;architecture a of VGA issignal hs1,vs1,fclk,cclk,divide_clk,dly: std_logic;signal mmode :std_logic_vector(1 downto 0); --方式选择signal cnt :std_logic_vector(2 downto 0);signal fs :std_logic_vector(3 downto 0);signal cc :std_logic_vector(4 downto 0); --行同步/横彩条生成 signal ll :std_logic_vector(8 downto 0); --长同步/竖彩条生成 signal grbh :std_logic_vector(3 downto 1); --X 横彩条signal grby :std_logic_vector(3 downto 1); --Y 竖彩条signal grbx :std_logic_vector(3 downto 1); --文字signal grbt :std_logic_vector(3 downto 1); --图案signal grbp :std_logic_vector(3 downto 1);signal grb :std_logic_vector(3 downto 1);signal x :integer range 0 to 800;signal x1: integer range 0 to 800;signal y1: integer range 0 to 600;signal x2: integer range 0 to 800;signal x3: integer range 0 to 800;signal x4: integer range 0 to 800;signal x5: integer range 0 to 800;signal x7: integer range 0 to 800;signal x8: integer range 0 to 800;signal x9: integer range 0 to 800;signal x10: integer range 0 to 800;signal x11: integer range 0 to 800;signal y2: integer range 0 to 600;signal y3: integer range 0 to 600;signal y4: integer range 0 to 600;signal y5: integer range 0 to 600;signal y6: integer range 0 to 600;signal c: integer range 0 to 30;begingrb(3)<=(grbp(3) xor mode) and hs1 and vs1;grb(2)<=(grbp(2) xor mode) and hs1 and vs1;grb(1)<=(grbp(1) xor mode) and hs1 and vs1;process(mode)beginif mode'event and mode='1' thenif mmode="11" thenmmode<="00";elsemmode<=mmode+1;end if;end if;end process; --四种模式process (mmode)beginif mmode="00" then grbp<=grbx;elsif mmode="01" then grbp<=grbh; --选择横彩条 elsif mmode="10" then grbp<=grby; --选择竖彩条elsif mmode="11" then grbp<=grbh xor grby; --选择棋盘格 else grbp<="000";end if;end process;process(clk) --3/4分频 beginif clk'event and clk='1' thencnt<=cnt+3;dly<=cnt(2);end if;--if cnt<3 then-- divide_clk<='0';--elsif cnt<5 then-- divide_clk<='1';--else-- cnt<="000";--end if;end process;divide_clk<=(cnt(2) xor dly) and clk;process(divide_clk) --13分频beginif divide_clk'event and divide_clk='1' thenif fs=12 thenfs<="0000";elsefs<=fs+1;end if;end if;end process;process(fclk)beginif fclk'event and fclk='1' thenif cc=29 thencc<="00000";elsecc<=cc+1;end if;end if;end process;d<=fclk;process(cclk)beginif cclk'event and cclk='1' thenif ll=481 thenll<="000000000";elsell<=ll+1;end if;end if;end process;process(cc,ll)beginif cc>23 then --行同步hs1<='0';elsehs1<='1';end if;if ll>479 then --长同步 vs1<='0';elsevs1<='1';end if;end process;process(clk)beginif clk'event and clk='1' thenif hs1='0' thenx<=0;elsex<=x+1;end if;end if;end process;process(x,ll,cc,hs1,vs1)variable s1: integer range 0 to 3;beginif cc<3 then grbh<="111"; --竖彩条 elsif cc<6 then grbh<="110";elsif cc<9 then grbh<="101";elsif cc<12 then grbh<="100";elsif cc<15 then grbh<="011";elsif cc<18 then grbh<="010";elsif cc<21 then grbh<="001";else grbh<="000";end if;if ll<60 then grby<="111"; --横彩条 elsif ll<120 then grby<="110";elsif ll<180 then grby<="101";elsif ll<240 then grby<="100";elsif ll<300 then grby<="011";elsif ll<360 then grby<="010";elsif ll<420 then grby<="001";else grby<="000";end if;if x=4 thengrbx<="100";elsif x=180 thengrbx<="001";elsegrbx<="000";end if;if ll>20 and ll<24 thenif x<110 thengrbx<="100";end if;end if;if ll>30 and ll<33 thenif x<80 thengrbx<="100";end if;end if;if ll>445 and ll<449 thenif x>90 thengrbx<="001";end if;end if;if ll>437 and ll<440 thenif x>100 thengrbx<="001";end if;end if;--"湖"if ll>89 and ll<94 thenif x=100 or x=103 or x=106 or x=107 or x=108 then grbx<="110";end if;end if;if ll>93 and ll<98 thenif x=102 or x=103 or x=104 or x=106 or x=108 then grbx<="110";end if;end if;if ll>97 and ll<102 thenif x=100 or x=103 or x=106 or x=107 or x=108 then grbx<="110";end if;end if;if ll>101 and ll<106 thenif x=102 or x=103 or x=104 or x=106 or x=108 thengrbx<="110";end if;end if;if ll>105 and ll<110 thenif x=100 or x=102 or x=104 or x=106 or x=107 or x=108 then grbx<="110";end if;end if;if ll>109 and ll<114 thenif x=100 or x=102 or x=103 or x=104 or x=106 or x=108 then grbx<="110";end if;end if;if ll>113 and ll<118 thenif x=106 thengrbx<="110";end if;end if;--"南"if ll>121 and ll<126 thenif x=104 thengrbx<="110";end if;end if;if ll>125 and ll<130 thenif x>99 and x<109 thengrbx<="110";end if;if ll>129 and ll<134 thenif x=104 thengrbx<="110";end if;end if;if ll>133 and ll<138 thenif x>99 and x<109 thengrbx<="110";end if;end if;if ll>137 and ll<142 thenif x=100 or x=108 thengrbx<="110";end if;end if;if ll>141 and ll<146 thenif x=100 or x=103 or x=105 or x=108 thengrbx<="110";end if;end if;if ll>145 and ll<150 thenif x=100 or x=102 or x=103 or x=104 or x=105 or x=106 or x=108 then grbx<="110";end if;end if;if ll>149 and ll<154 thenif x=100 or x=104 or x=108 thengrbx<="110";end if;if ll>153 and ll<158 thenif x=100 or x=102 or x=103 or x=104 or x=105 or x=106 or x=108 thengrbx<="110";end if;end if;if ll>157 and ll<162 thenif x=100 or x=104 or x=108 thengrbx<="110";end if;end if;--"大"if ll>165 and ll<170 thenif x=103 or x=104 thengrbx<="110";end if;end if;if ll>169 and ll<174 thenif x=103 or x=104 thengrbx<="110";end if;end if;if ll>173 and ll<178 thenif x=100 or x=101 or x=102 or x=103 or x=104 or x=105 or x=106 or x=107 or x=108 thengrbx<="110";end if;end if;if ll>177 and ll<182 thenif x=103 or x=104 thengrbx<="110";end if;end if;if ll>181 and ll<186 thenif x=103 or x=104 thengrbx<="110";end if;end if;if ll>185 and ll<190 thenif x=103 or x=105 thengrbx<="110";end if;end if;if ll>189 and ll<194 thenif x=102 or x=103 or x=106 thengrbx<="110";end if;end if;if ll>193 and ll<198 thenif x=101 or x=102 or x=107 thengrbx<="110";end if;end if;if ll>197 and ll<202 thenif x=100 or x=101 or x=107 or x=108 then grbx<="110";end if;end if;--"学"if ll>205 and ll<210 thenif x=102 or x=104 or x=106 thengrbx<="110";end if;end if;if ll>209 and ll<214 thenif x=100 or x=101 or x=102 or x=103 or x=104 or x=105 or x=106 or x=107 or x=108 thengrbx<="110";end if;end if;if ll>213 and ll<218 thenif x=100 or x=108 thengrbx<="110";end if;end if;if ll>217 and ll<222 thenif x=102 or x=103 or x=104 or x=105 or x=106 thengrbx<="110";end if;end if;if ll>221 and ll<226 thenif x=105 thengrbx<="110";end if;end if;if ll>225 and ll<230 thenif x=104 thengrbx<="110";end if;end if;if ll>229 and ll<234 thenif x=100 or x=101 or x=102 or x=103 or x=104 or x=105 or x=106 or x=107 or x=108 thengrbx<="110";end if;end if;if ll>233 and ll<238 thenif x=104 thengrbx<="110";end if;end if;if ll>237 and ll<242 thenif x=104 thengrbx<="110";end if;end if;if ll>241 and ll<245 thenif x=103 or x=104 thengrbx<="110";end if;end if;if vs1'event and vs1='1' thenif c=20 thenc<=0;case s1 iswhen 0 =>if x1=120 thens1:=1;elsex1<=x1+1 ; end if;when 1 =>if y1=350 thens1:=2;elsey1<=y1+1; end if;when 2 =>if x1=35 thens1:=3;elsex1<=x1-1; end if;when 3 =>if y1=280 thens1:=0;elsey1<=y1-1; end if;end case;elsec<=c+1;end if;end if;--"HU NAN DA XUE"x2<=x1+1;x3<=x1+2;x4<=x1+3;x5<=x1+5;x7<=x1+7;x8<=x1+8;x9<=x1+9;x10<=x1+10;x11<=x1+11;--y1<=250;y2<=y1+4;y3<=y1+8;y4<=y1+12;y5<=y1+16;y6<=y1+20;if ll>=y1 and ll<y2 thenif x=x1 or x=x5 or x=x7 or x=x8 or x=x11 thengrbx<="101";end if;end if;if ll>=y2 and ll<y3 thenif x=x1 or x=x5 or x=x7 or x=x8 or x=x9 or x=x11 then grbx<="101";end if;end if;if ll>=y3 and ll<y4 thenif x=x1 or x=x2 or x=x3 or x=x4 or x=x5 or x=x7 or x=x9 or x=x11 then grbx<="101";end if;end if;if ll>=y4 and ll<y5 thenif x=x1 or x=x5 or x=x7 or x=x10 or x=x11 thengrbx<="101";end if;end if;if ll>=y5 and ll<y6 thenif x=x1 or x=x5 or x=x7 or x=x10 or x=x11 thengrbx<="101";end if;end if;if ll>100 and 11<150 then --图案设计if ll>121 and ll<126 thenif x>43 and x<57 thengrbx<="100";end if;elsif x=50 thengrbx<="100";end if;end if;if ll>150 and 11<200 thenif ll>171 and ll<176 thenif x>60 and x<74 thengrbx<="010";end if;elsif x=67 thengrbx<="010";end if;end if;if ll>200 and 11<250 then if ll>221 and ll<226 then if x>74 and x<88 then grbx<="001";end if;elsif x=81 thengrbx<="001";end if;end if;end process;fclk<=fs(2);cclk<=cc(4);hs<= not hs1;vs<= not vs1;g<=grb(3);r<=grb(2);b<=grb(1);end a;。
基于VHDL的m序列

(1) 随机性 m 序列一个周期N = 2n- 1 内“1”和“0”的码元 数大致相等, “0”出现 2n- 1- 1 次, “1”出现 2n- 1次 (“1”比“0”只多一个) 。m 序列中连续的为“1”或
收稿日期: 2003 数称为游程长度。一个周期 P = 2n- 1 内, 共有 2n- 1个游程, 其中长度为 1 (单“1”, 或 单 “0 ”, ) 的 游 程 占 总 游 程 的 1 2, 长 度 为 2 ( “11”或 “00”) 的游程占总游程的 1 4, 长度为 3 ( “111”或“000”) 的游程占总游程的 1 8, 长度为 k 的 游程占总游程的 1 2k, 只有一个包含 (n 一 l) 个 “0”的游程, 也只有一个包含 n 个 “1”的游程。
示断开, C i= 1 表示连接。因此这个N 阶移位寄存器的
反馈函数为:
n
∑ F (X 1, X 2, …, X n) =
C iX i
i= 1
特征多项式是:
n
∑ f (x ) =
C iX i = C 0 + C 1X 1 + C 2X 2 + … + C nX n
i= 0
特征多项式中的 X i ( i= 0, 1, 2111n) 与移位寄
m Sequence Ba sed on VHDL
FAN Q iuhua, J I Hongyan
(D ep artm en t of Com p u ter Engineering, Q ingdao In stitu te of A rch itech tu re Engineering, Q ingdao, 266033, Ch ina)
《现代电子技术》2003 年第 7 期总第 150 期
基于FPGA的m序列发生器的设计

的周期最长的一种基本序 列。本文首先分析m序列 的基本原 理 、结构 、性质 ,然 后实现了1 位m序列 的仿真 以 5 及硬件 实现 ,最终用示波器 观察 波形。实验表 明 ,使 用该方法实现 的m 序列发生器 , 结构简单, 快, 用范 速度 适
围广。
关键词 :m序列 ;伪随机码 ;F GA P
号 , 还可用作噪声源及在保密通 信中起加密作用等 。伪噪声
发生器在 测距 、通信 等领域的应用 日益受 到人 们重视 。有
灵活性 , 且由于 F G 并 P A便于实现大规模的数字系统 , 中 其
中 图 分 类 号 : N9 5 . T 2 +9 文献标识码 : A
D e i f di t lt a m it r ba e sgn o gia r ns t e s d on FPG A
G oL i h nZ i a g a e,C e hq n ,W uLh i P  ̄i g i iu , uNa a n ( n tue f i a Ca tr g&P o e igT c n lg , a ie i f hn , a u n0 0 5 , hn ) Istt g l p i i oSn u n r c sn eh oo yNo hUnv r t o ia i a ,3 0 C ia s sy C T y 1
2 " 年 8月 o 第 8期
电 子
测
试
ELECTR0N I C T ES T
Aug. 2011 N o. 口
基于F G P A的m序列 发生器 的设 计★
高磊 ,陈志强 ,吴黎 慧 ,蒲南江 ( 中北大 学信息探测 与处理技术研究所 ,山西 太原 0 0 5 ) 3 0 1 摘要 :随机码越来越受 到人 们的重视 ,被广泛应用于导弹 、卫 星、飞船轨道 测量和 跟踪 、雷达 、导航 、移动通 信 、保密通 信和通 信系统性能的测量 以及 数字信息处理系统 中。1序 列是 伪随机码 中,带线性反馈移位寄存器 T I
基于FPGA的M序列的设计与实现

0 引言
扩频 通信 系统 与传统 通信 系统 的区别 在 于其
利 用伪 随机序 列来 实现 扩频 与解 扩步 骤 。而伪 随 机 序列 作为扩 频通 信系 统 的关 键 ,将 直接 影 响到
系统 的性 能 。
实 现 同步 与 捕获 等 都 与 扩频 码 的设 计 密 切相 关 。
自相关 函数 .即 :
6 电 子元 器 件 主 用 20. 4 079
. dan e c c c
维普资讯
第9 卷
期 2 7第月 0年 9 0 9
莲钎渗
V1 N. o o . 9 9
S . 2 07 ep 0
f l
当r 0 =
香农在 证 明编码 定理 的时候 ,也 提 出 了使 用具 有 白噪声 统计特性 的信号 来编码 。
通 常采 用 的 二 电平 ( ,1 0 )伪 随 机 序列 的结 构 已预先 确定 ,但 它们 都具 有类 似 白噪声 的相 关 特性 ,只是 幅度概 率分 布不 再服 从高 斯分 布 。伪
22 基 于 V D 语 言 的 F G . H L P A实 现
FG P A器 件 具 有 集 成 度 高 、编 程 灵 活 、阵 列 引脚 数 多 、功 耗 低 、设 计 编程 速 度 快 等 特 点 [ 4 1 。 Q ats1 . A tr 司第 五 代 可 编 程 逻 辑 器 u r 0是 l a公 u I5 e 件 的集 成开 发 环 境 。该 软件 可 提供 从 设 计 输入 、 设计 编译 、功能 仿 真 、设 计处 理 、时 序仿 真 到器
尺 小 于C,二 是 编 码 的 码 长 周 期 足 够 长 。 同 时 ,
以确保 抗 侦破 、抗 干扰 的要求 。
基于VHDL可编程m序列发生器的设计及应用

m 序列 广泛应 用 于数字基 带信 号进行 加扰 , 改 善 数字 序列 的位 定 时质 量 与 帧 同步 和 自适 应 时 域 均 衡性 能 , 同时 也是 构 造 平衡 G L O D码 的基 础 . 目 前 , 序 列产 生 电路 的实 现方 法主要 有 3种 : i n 1 )门电路实 现 . 方法设 计简 单 , 随移位 寄 该 但 存 器级 数 的增长 , 电路 装 调 困难 , 占用 的 印制 板 且
计输 入 、 速处 理和器 件编 程 引. 快
线 性反 馈移 位寄存 器 的特征 多项 式 :
摘要 : 介绍 了在 实 际教 学 中应 用 V L设计 出一 种能产 生 1 序 列数 字信 号 的发 生 器. HD T I 该序 列发 生 器具 有序 列长 度 和反 馈 连 接 设 置 , 能产 生 多种 i 列 波形 的 特 点. 软 件 上 采 用 Ata公 司 的 n序 在 lr e
种 序列 . 在今 天 的数 字 信 号 的传 输 中 , 发送 机往
往要 加扰码 器 , 对应 的接 收 端要 加 解 扰器 , n 相 而 l
序列 属 于伪 噪声 序列 和 伪 随 机序 列 , 容 易产 生 、 它
规律 性强 、 很 好 的 自相 关 性 和 较 好 的互 相 关 特 有
一
2 S 程实现 . )D P编 该方 法专 业性 过强 , 适合 不
实际教 学 中应 用. 3 H L与 C L )V D P D实现 . 由于 C L P D的高 集成
度, 而且 V L语 言 编程 较 为 方便 , 可 以大 大减 HD 故
少 电路 的装调 的 困难.
V D H L已成 为 电子工 程 领 域 事实 上 的 通 用硬
基于FPGA的m序列信号发生器设计

基于FPGA的m序列信号发生器设计摘要:m序列是一种伪随机序列(PN码),广泛用于数据白噪化、去白噪化、数据传输加密、解密等通信、控制领域。
基于FPGA与Verilog硬件描述语言设计井实现了一种数据率按步进可调、低数据误码率、反馈多项式为的m序列信号发生器。
系统时钟为20MHz,m序列信号发生器输出的数据率为20~100 kbps,通过2个按键实现20 kbps步进可调与系统复位,输出误码率小于1%。
m序列是最长线性反馈移位寄存器序列的简称,它是由带线性反馈的移位寄存器产生的周期最长的一种伪随机序列。
是由移位寄存器、反馈抽头及模2加法器组成。
m序列一旦反馈多项式及移位寄存器初值给定,则就是可以预先确定并且可以重复实现的序列,该特点使得m序列在数据白噪化、去白噪化、数据传输加密、解密等通信、控制领域使用广泛。
因此,深入学习研究m序列具有重要的实际意义。
1 m序列信号发生器的组成基于FPGA的m序列信号发生器硬件结构极其简单,仅需两个独立按键(一个是复位按键与另一个控制数据率切换按键)、一个48 MHz 的用于提供系统时钟有源晶振、系统电源、一块配置芯片、几个简单的电阻与电容即可实现。
按键去抖动、按键复位、按键切换数据率、时钟分频等功能均在FPGA内部编程实现。
2 m序列信号发生器的关键设计本文中m序列信号发生器的反馈多项式为。
其反馈及移位寄存器的关系图如图2所示。
从本设计中的反馈及移位寄存器的关系图可以看出,一个时钟周期,移位寄存器右移一位,最高位输入为x0、x2、x3、x4及x8的异或(模2相加)。
m序列的输出是移位寄存器的最低位。
图2所示的关系是m序列呈现为随机性、周期性的根本原因。
为了满足信号发生器输出数据率20 kbps的步进通过按键可调,则生成按步进20 kbps可调的时钟是实现该功能的关键。
当按键发生,时钟的输出频率加20 kbps。
在实际电路中,按键会有很大抖动,对系统会造成很大的不稳定性,因此,必须想办法减小这样的不利影响。
基于FPGA的简易m序列信号发生器

基于FPGA的简易m序列信号发生器【摘要】本系统基于FPGA为控制核心,采用EXCD-XC3S500E开发板及模拟电路,完成了简易数字m序列信号发生器的设计,实现对数字m序列信号的生成与发送。
【关键词】FPGA;m序列信号;曼彻斯特编码1.方案论证与比较数字信号为m序列,m序列发生器是一种反馈移位型结构的电路,它由n 位移位寄存器加异或反馈网络组成,反馈多项式为本原多项式。
实现移位寄存器的长与反馈式的编程选择,即可实现对m序列的控制。
m序列码发生器是一种反馈移位型结构的电路,它由n位移位寄存器加异或反馈网络组成,其序列长度M=2n-1 。
序列信号发生器一般有两种结构形式:一种是反馈移位型,另一种是计数型。
方案一:反馈移位型序列信号发生器反馈移位型序列码发生器的结构框图如图1所示,它由移位寄存器和组合反馈网络组成,从移存器的某一输出端可以得到周期性的序列码。
方案二:计数型序列码发生器计数型序列码发生器结构框图如图2所示。
它由计数器和组合输出网络两部分组成,序列码从组合输出网络输出。
综合比较,本次设计时由于已知数字信号和伪随机信号各自的f(x)表达式,故采用方案一,采用VHDL硬件描述语言,在XILINX的开发板上编程实现产生所要求的数字信号。
2.系统设计数字信号V为f(x)=1+x +x +x +x 的m序列,采用线性移位寄存器发生器产生数字信号和对应的时钟信号,要求数据率10~100kbps,步进值10kbps,其误差绝对值不大于1%,输出信号为TTL电平。
m序列数字信号是基于FPGA的存储器结构,采用线性移位寄存器发生器产生m序列的本原多项式,并且可以对任意级数的m序列发生器采用VHDL语言进行编写。
其产生原理是m序列信号发生器是在n级线性移位寄存器的基础上可以产生多个m序列,而每一个m序列有对应着一个确定的反馈函数,m序列线性移位寄存器在逻辑上仅可用加法器实现。
其反馈函数:本原多项式f1(x)=1+x +x +x +xm序列的移位寄存器逻辑反馈:f1(x)=x(8)⊕x(4)⊕x(3)⊕x(2)反馈移位寄存器的逻辑功能图如图3所示。
两种利用FPGA产生m序列的算法分析

两种利用FPGA产生m序列的算法分析作者:陈天成王艳红来源:《现代电子技术》2014年第05期摘要:为了产生性能良好且节省硬件资源的m序列,分别提出了基于现场可编程门阵列(FPGA)的逻辑法和核调用法两种算法,并详细介绍了两种算法的实现步骤。
通过在Xilinx 公司的NEXYS3开发板上进行设计和编程,对两种算法的可行性进行了检测;并结合ISE编程软件的仿真功能和Matlab对算法的自相关性、硬件占用率和实现难度等性能进行了分析。
最终,了解到核调用法在m序列产生中的优越性。
关键词: m序列; FPGA; IP核; ISE中图分类号: TN919⁃34 文献标识码: A 文章编号: 1004⁃373X(2014)05⁃0058⁃030 引言伪随机序列作为一种信号形式,具有良好的相关特性和伪随机性,可应用于扩频通信和信号加密等领域。
根据应用场合的不同,可以将伪随机序列设计成具有不同特性的序列,其中,m序列便是应用最广泛的一种伪随机序列[1⁃2]。
m序列是最长线性反馈移位寄存器序列的简称,由[N]级移位寄存器和模二加法器产生。
对于一个[N]级移位寄存器来说,最多可以有[2N]个状态。
由于全“0”状态不会转入其他状态,所以线性移位寄存器的序列的最长周期为 [2N-1。
]当[N]级线性移位寄存器产生的序列[{ai}]的周期为[T=2N-1]时,称[{ai}]为[N]级m序列[3]。
本文采用Xilinx公司的spartan⁃6开发板来产生m序列。
FPGA因其高速的计算速度和简便的编译步骤被越来越广泛的应用于数字信号处理领域。
Spartan⁃6自带100 MHz内部晶振,最高可以提供高达300 MHz的运算速度。
1 m序列的实现算法1.1 逻辑法程序的移位寄存器功能模拟部分,根据特征方程,将序列Seq_r的第0、2、3和4位对应数值进行模二运算并将结果作为新的数据输入寄存器的高位。
此处应避免初始状态为全零[4]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
说明可控m序列产生器我分成四个小模块来做,M,M1,M2,M3分别对应为:m序列产生器、控制器、码长选择器、码速率选择器。
一、M: m序列产生器这是该设计的核心部分,原理就是设计一个通用m序列产生子单元,然后由外部选择器来写入码型,码长等参数,加以循环可连接成任意长度的m序列产生器,其子单元结构如下:如上图,若N=15,就有15个这样的子单元首尾相接。
注意:开头和结尾的两个子单元会有所不同,因为首单元需要输入初值,尾单元要进行直通反馈,在程序里请多留意。
图中,主要部件是一个D触发器,Q(N+1)为上一级输出;Q(N)既是本级输出;CP为选择后的时钟脉冲;B(N)为本级参数选择控制;A(N)受控于B(N),决定本级输出Q(N)是否反馈(B(N)为1时反馈);C(N)为本级反馈;C(N-1)为下一级反馈。
具体原理参看m序列组成结构。
此外,本程序还加入了EN(发送控制)、RN(首单元置数)、SEL1(码长选择,即N的选择,N=2-15)、SEL2(码型选择,即正逆码选择)四个控制端,可满足设计要求。
OP为码输出端。
二、M1:控制器控制器主要是将外部的序列发送控制信号STA转换为EN和RN 两个控制信号。
其中,EN与STA的波形基本一致,只是它与CP进行了同步处理;RN在EN为‘1’的头一个脉冲周期里置高电平,以达到为序列发生器的首端置数的目的。
如果不清楚的话可以看一下它的模拟波形。
(注意:STA要采用自锁定开关,高电平有效)三、M2:码长选择序列的码长选择既是N值的选择,码长=2**N-1。
核心就是一个计数器,可从2计到15。
按一次PUSH就可以自动加一(注意:按键建议采用自弹跳按键,如过需要软件清除按键震颤的话,我再做发给你),没有0,1两个状态。
如果需要的话还可以扩展7段数码管的接口,以显示N值。
四、M3:码速率选择器码的传输速率是靠CP来控制的,CP的频率就等于码元速率。
这段程序包含一个倍频器,一个5分频的分频器,可把5MHZ的脉冲源CLK扩展成1MHZ和10MHZ。
FSEL1、FSLE2、FSEL3分别在选择1、5、10MHZ时为高电平,其余两个为低,建议采用3选1单刀单掷开关。
M1-------------------------------------------------- LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CTRL ISPORT(CP,STA : IN STD_LOGIC;EN,RN : OUT STD_LOGIC);END CTRL;ARCHITECTURE a OF CTRL ISSIGNAL Q1,Q2 :STD_LOGIC; BEGINPROCESS(CP)BEGINIF CP’event AND CP=’1’ THENQ2<=Q1;Q1<=STA;END IF;END PROCESS;EN<=Q1;RN<=Q1 AND NOT Q2;END a;M2------------------------------------------------- LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER ISPORT(PUSH,EN,RST : IN STD_LOGIC;SEL1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END COUNTER;ARCHITECTURE a OF COUNTER ISSIGNAL B,C : STD_LOGIC;SIGNAL QN : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(PUSH,C)BEGINIF EN=’0’ THENIF C=’1’ THENQN<=”0010”;ELSEIF PUSH’EVENT AND PUSH=’1’ THENQN<=QN+1;END IF;ELSEQN<=QN;END IF;END PROCESS;B<=’1’ WHEN QN=”0000” ELSE‘0’;C<=B OR RST;SEL1<=QN;END a;M3-----------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FP ISPORT(CLK,FSEL1,FSEL2,FSEL3 : IN STD_LOGIC;CP : OUT STD_LOGIC);END FP;ARCHITECTURE a OF FP ISSIGNAL Q1,Q2,Q3,RST : STD_LOGIC;SIGNAL M1,M5,M10 : STD_LOGIC;SIGNAL QN : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGINBP1 : BLOCKBEGINPROCESS(CLK,Q1)BEGINIF Q1=’1’ THENQ1<=’0’ELSEIF CLK’EVENT AND CLK=’1’ THENQ1<=’1’;END IF;END PROCESS;END BLOCK BP1;BP2 : BLOCKBEGINPROCESS(CLK,Q2)BEGINIF Q2=’1’ THENQ2<=’0’ELSEIF CLK’EVENT AND CLK=’0’ THENQ2<=’1’;END IF;END PROCESS;END BLOCK BP2;FP : BLOCKBEGINPROCESS(CLK,RST)BEGINIF RST=’1’ THENQN<=”000”;ELSEIF CLK’EVENT AND CLK=’1’ THENQN<=QN+1;END IF;END PROCESS;END BLOCK FP;Q3<=Q1 OR Q2;RST<=’1’ WHEN QN=”101” ELSE‘0’;M1<=QN(2) AND FSEL1;M2<=CLK AND FSEL2;M3<=Q3 AND FSEL3;CP<=M1 OR M2 OR M3;END a;M----------------------------------------LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PN1 ISPORT(CP,SEL2,EN,RN : IN STD_LOGIC;SEL1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);OP : OUT STD_LOGIC);END PN1;ARCHITECTURE a OF PN1 ISSIGNAL Q, A,B,C : STD_LOGIC_VECTOR(14 DOWNTO 0);SIGNAL SEL : STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINSEL<=SEL1&SEL2;PROCESS (CP,SEL)BEGINIF CP'event AND CP='1' THENIF EN='0' THENQ<="0000";OP<=Q(0);ELSEQ(14)<=C(14) OR RN;B<="0000";CASE SEL ISWHEN"11111"=>C(0)<=Q(0);B(1)<='1';FOR I IN 1 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(0);WHEN"11110"=>C(0)<=Q(0);B(14)<='1';FOR I IN 1 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(0);WHEN"11101"=>C(1)<=Q(1);B(2)<='1';B(7)<='1';B(11)<='1';FOR I IN 2 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(1); WHEN"11100"=>C(1)<=Q(1);B(5)<='1';B(9) <='1';B(14) <='1';FOR I IN 2 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(1); WHEN"11011"=>C(2) <=Q(2);B(3) <='1';B(5) <='1';B(6) <='1';FOR I IN 3 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(2); WHEN"11010"=>C(2) <=Q(2);B(11) <='1';B(12) <='1';B(14) <='1';FOR I IN 3 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(2); WHEN"11001"=>C(3) <=Q(3);B(4) <='1';B(7) <='1';B(9) <='1';FOR I IN 4 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(3); WHEN"11000"=>C(3) <=Q(3);B(9) <='1';B(11) <='1';B(14) <='1';FOR I IN 4 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(3); WHEN"10111"=>C(4) <=Q(4);B(6) <='1';FOR I IN 5 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(4); WHEN"10110"=>C(4) <=Q(4);B(13) <='1';FOR I IN 5 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(4); WHEN"10101"=>C(5) <=Q(5);B(8) <='1';FOR I IN 6 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(5); WHEN"10100"=>C(5) <=Q(5);B(12) <='1';FOR I IN 6 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(5); WHEN"10011"=>C(6) <=Q(6);B(10) <='1';FOR I IN 7 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(6); WHEN"10010"=>C(6) <=Q(6);B(11) <='1';FOR I IN 7 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(6); WHEN"10001"=>C(7) <=Q(7);B(9) <='1';B(10) <='1';B(11) <='1';FOR I IN 8 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(7); WHEN"10000"=>C(7) <=Q(7);B(11) <='1';B(12) <='1';B(13) <='1';FOR I IN 8 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(7); WHEN"01111"=>C(8) <=Q(8);B(11) <='1';FOR I IN 9 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(8); WHEN"01110"=>C(8) <=Q(8);B(12) <='1';FOR I IN 9 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(8); WHEN"01101"=>C(9) <=Q(9);B(10) <='1';FOR I IN 10 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(9); WHEN"01100"=>C(9) <=Q(9);B(14) <='1';FOR I IN 10 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(9); WHEN"01011"=>C(10) <=Q(10);B(12) <='1';FOR I IN 11 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(10); WHEN"01010"=>C(10) <=Q(10);B(13) <='1';FOR I IN 11 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(10); WHEN"01001"=>C(11) <=Q(11);B(12) <='1';FOR I IN 12 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(11); WHEN"01000"=>C(11) <=Q(11);B(14) <='1';FOR I IN 12 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(11);WHEN"00111"=>C(12) <=Q(12);B(13) <='1';FOR I IN 13 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(12);WHEN"00110"=>C(12) <=Q(12);B(14) <='1';FOR I IN 13 TO 14 LOOPQ(I-1)<=Q(I);A(I)<=Q(I) AND B(I);C(I)<=C(I-1) XOR A(I);END LOOP;OP<=Q(12);WHEN OTHERS=>C(13) <=Q(13);B(14) <='1';Q(13)<=Q(14);A(14)<=Q(14) AND B(14);C(14)<=C(13) XOR A(14);OP<=Q(13);END CASE;END If;END IF;END PROCESS;END a;。