FPGA入门——basys2开发板的伪随机gold码的生成

本文原创,转载请注明出处。

1.gold码简介

gold码是一种伪随机码,由两个m序列通过不同的相位抽头与或产生,具有很好的自相关与互相关特性,广泛应用于扩频通信。GPS中使用的C/A扩频码即10位寄存器长度的gold码。

2.设计目标

本文在basys2内部产生10位寄存器长度的gold码,通过开关控制相位抽头,并通过0.5s刷新速度的LED流水灯显示。

3.vhdl源码

  1 library IEEE;
  2 use IEEE.STD_LOGIC_1164.ALL;
  3 use IEEE.STD_LOGIC_ARITH.ALL;
  4 use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5
  6 entity top is
  7     port(
  8             clk        :    in        STD_LOGIC;    --系统时钟
  9             rst        :    in     STD_LOGIC;    --reset
 10             tap_1        :    in        STD_LOGIC_VECTOR ( 3 downto 0 );    --m序列相位选择,根据具体输入硬件而定
 11             tap_2        :    in        STD_LOGIC_VECTOR ( 3 downto 0 );
 12             led        :    out    STD_LOGIC_VECTOR ( 7 downto 0 )    --led流水灯控制,根据具体输出硬件而定
 13             );
 14 end top;
 15
 16 architecture Behavioral of top is
 17     signal    reg_1        :    STD_LOGIC_VECTOR( 9 downto 0 );    --10位循环移位寄存器
 18     signal    reg_2        :    STD_LOGIC_VECTOR( 9 downto 0 );
 19     signal    reg_gold    :    STD_LOGIC_VECTOR( 7 downto 0 );    --gold码8位缓存用于显示
 20     signal    tmp_1        :    STD_LOGIC;    --循环移位反馈信号
 21     signal    tmp_2        :    STD_LOGIC;
 22     signal    m_1        :    STD_LOGIC;    --m序列
 23     signal    m_2        :    STD_LOGIC;
 24     signal    gold        :    STD_LOGIC;    --gold序列
 25     signal    clk_sec    :    STD_LOGIC:=‘0‘;    --秒时钟
 26     signal    cnt_sec    :    INTEGER;    --用于产生秒时钟的模
 27
 28 begin
 29 led(7 downto 0)<=reg_gold(7 downto 0);    --输出给8个Led灯
 30
 31     --产生秒时钟clk_sec的模块
 32     process(clk,rst)
 33     begin
 34     if (rst=‘0‘) then
 35         cnt_sec<=0;
 36     elsif(clk‘event and clk=‘1‘) then
 37         if(cnt_sec=12500000) then
 38             cnt_sec<=0;
 39             clk_sec<=not clk_sec;
 40         else
 41             cnt_sec<=cnt_sec+1;
 42         end if;
 43     end if;
 44     end process;
 45
 46     --产生m序列1
 47     process(clk_sec,rst,reg_1)
 48     begin
 49     tmp_1<=reg_1(2) xor reg_1(9);    --反馈抽头在第3、10位
 50         if (rst=‘0‘) then
 51             reg_1<=(others=>‘1‘);
 52         elsif (clk_sec‘event and clk_sec=‘1‘) then
 53             reg_1<=reg_1(8 downto 0)&tmp_1;    --循环移位
 54         end if;
 55     end process;
 56
 57     --产生m序列2
 58     process(clk_sec,rst,reg_2)
 59     begin
 60     tmp_2<=(reg_2(1) xor reg_2(2))xor(reg_2(7) xor reg_2(9));    --反馈抽头在2、3、8、10位
 61         if (rst=‘0‘) then
 62             reg_2<=(others=>‘1‘);
 63         elsif (clk_sec‘event and clk_sec=‘1‘) then
 64             reg_2<=reg_2(8 downto 0)&tmp_2;    --循环移位
 65         end if;
 66     end process;
 67
 68     --m序列1的相位抽头选择,本部分根据具体输入硬件编程
 69     process(tap_1,reg_1)
 70     begin
 71         case tap_1 is
 72             when    b"0001"=>m_1<=reg_1(1);
 73             when    b"0010"=>m_1<=reg_1(2);
 74             when    b"0011"=>m_1<=reg_1(3);
 75             when    b"0100"=>m_1<=reg_1(4);
 76             when    b"0101"=>m_1<=reg_1(5);
 77             when    b"0110"=>m_1<=reg_1(6);
 78             when    b"0111"=>m_1<=reg_1(7);
 79             when    b"1000"=>m_1<=reg_1(8);
 80             when    b"1001"=>m_1<=reg_1(9);
 81             when    others =>m_1<=reg_1(0);
 82         end case;
 83     end process;
 84
 85     --m序列2的相位抽头选择,本部分根据具体输入硬件编程
 86     process(tap_2,reg_2)
 87     begin
 88         case tap_2 is
 89             when    b"0001"=>m_2<=reg_2(1);
 90             when    b"0010"=>m_2<=reg_2(2);
 91             when    b"0011"=>m_2<=reg_2(3);
 92             when    b"0100"=>m_2<=reg_2(4);
 93             when    b"0101"=>m_2<=reg_2(5);
 94             when    b"0110"=>m_2<=reg_2(6);
 95             when    b"0111"=>m_2<=reg_2(7);
 96             when    b"1000"=>m_2<=reg_2(8);
 97             when    b"1001"=>m_2<=reg_2(9);
 98             when    others =>m_2<=reg_2(0);
 99         end case;
100     end process;
101
102     --gold码生成
103     process(clk_sec,rst,m_1,m_2)
104     begin
105     gold<=m_1 xor m_2;
106         if (rst=‘0‘) then
107             reg_gold<=(others=>‘0‘);
108         elsif (clk_sec‘event and clk_sec=‘1‘) then
109             reg_gold<=reg_gold(6 downto 0)&gold;
110         end if;
111     end process;
112
113 end Behavioral;

4.引脚定义

 1 NET    "clk"             LOC="B8";
 2 NET    "rst"             LOC="G12";
 3 NET    "tap_1<0>"        LOC="N3";
 4 NET    "tap_1<1>"        LOC="E2";
 5 NET    "tap_1<2>"        LOC="F3";
 6 NET    "tap_1<3>"        LOC="G3";
 7 NET    "tap_2<0>"        LOC="B4";
 8 NET    "tap_2<1>"        LOC="K3";
 9 NET    "tap_2<2>"        LOC="L3";
10 NET    "tap_2<3>"        LOC="P11";
11 NET    "led<0>"          LOC="M5";
12 NET    "led<1>"          LOC="M11";
13 NET    "led<2>"          LOC="P7";
14 NET    "led<3>"          LOC="P6";
15 NET    "led<4>"          LOC="N5";
16 NET    "led<5>"          LOC="N4";
17 NET    "led<6>"          LOC="P4";
18 NET    "led<7>"          LOC="G1";
时间: 2024-10-11 22:14:24

FPGA入门——basys2开发板的伪随机gold码的生成的相关文章

[转]FPGA入门——basys2开发板的伪随机gold码的生成

本文原创,转载请注明出处:http://www.cnblogs.com/risten/p/4166169.html 1.系统原理 通过频率控制字选择相位步进,产生访问ROM的地址,进而控制DAC的输出波形与频率.整个系统由时钟生成.相位累加.ROM.DAC组成.限于basys2开发板的限制,本次将输出DAC替换为8个led灯显示. 2.系统设计 2.1 时钟生成 1 library IEEE; 2 use IEEE.STD_LOGIC_1164.ALL; 3 use IEEE.STD_LOGIC

初学FPGA图像处理,开发板选择建议

我用的是ZYNQ7010的开发板,纯粹是入门学习,对于初学者,使用较多的xlinx入门级的开发板一般是zynq7000系列,淘宝上买的较好的是黑金和米联科,我买的就是黑金的,个人觉得教程很少,学习资料不多,米联客图像处理的教程很多,如果你英语可以,也可以看官方的教程UG902就听详细,要是还不确定买什么板子,我觉得米联客的还是好些.最后分享下我的FPGA学习资料, 链接:https://pan.baidu.com/s/1wJ_lWyBbbk9TujKBM_essg 提取码:otqk 复制这段内容

[嵌入式开发入门]4412开发板从零建立Linux最小系统

本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小Linux 系统“麻雀虽小,五脏俱全”,它不带图形界面的Linux 系统,剔除干扰因素便于理解,用来学习Linux系统编程非常合适. 另外,Linux最小系统占用的内存空间很小,也经常用于不带图形界面的项目. 1. 最小Linux系统简介 制作文件系统需要使用到Busybox工具. BusyBox是一

[FPGA] 1、开发板使用和引脚连接

目录 1.注意事项 2.设备简介 3.引脚分配 注意事项: ① 插拔下载线时必须断电! ② Quartus II 软件和 NIOS 软件的版本必须一致,并安装在同一个目录下面,安装目录不要有中文和空格. ③ 工程未使用到的 IO 请设置为三态. ④ 要用quartusII不要用64位的那个启动,否则就报XXXX不支持. 设备简介: ① 主芯片采用 ALTERA 公司最新四代 FPGA CycloneIV 系列 EP4CE6E22C8N: ② 板载 EPCS4N/EPCS16 大容量串行配置芯片

解决三星ARM11开发板图片采集程序源码出现的Bug

三星公司提供的图片采集程序源码是这个: /***************** Capture Thread *****************/ void capture_thread(void) { int start, ret; int key; start = 1; ret = ioctl(cam_c_fp, VIDIOC_STREAMON, &start); if (ret < 0) { printf("V4L2 : ioctl on VIDIOC_STREAMON fai

对不同型号开发板的认识及环境搭建

对不同型号开发板的认识及环境搭建心得 开发板(demoboard)是用来进行嵌入式系统开发的电路板,包括中央处理器.存储器.输入设备.输出设备.数据通路/总线和外部资源接口等一系列硬件组件.在一般的嵌入式系统开发过程中,硬件一般被分成两个平台,一个是开发平台(host),一个是目标平台(target)即开发板.在此描述的开发平台指的是使用计算机,通过传输的界面,例如串口(RS-232).USB.并口.或者网络(Ethernet)与目标平台连接. 开发板一般由嵌入式系统开发者根据开发需求自己订制,

上位机串口控制FPGA开发板LED

实验目的: 上位机软件通过串口控制FPGA开发板上4个LED灯的亮灭,同时数码管显示LED灯亮的个数,实验效果如下图. 实验背景: 一直都想学习FPGA,这次算是入门了,我是看书学习的,所以FPGA的代码是参考着书本上的修改的,其实很高兴,因为这个实验是我自己发散出来的,书上的开发板和我用的开发板不一样,并且小软件也是自己用C#写的,总之,挺开心吧,本着开源的精神,所有的上位机代码和FPGA程序上传,如有需要请自行下载(点此下载).工作就没时间写教程之类的,简单的介绍一下吧 硬件平台: Cycl

ARM+FPGA开发板

Revision History   Revision No. Description Draft  Date V1.0 1.初始版本. 2014/12/4   阅前须知 版权声明 本手册版权归属广州创龙电子科技有限公司所有,非经书面同意,任何单位及个人不得擅自摘录本手册部分或全部,违者我们将追究其法律责任.本文档一切解释权归广州创龙电子科技有限公司所有. 2014-2018Guangzhou TronlongElectronicTechnologyCo.,Ltd.All rights rese

学习友晶FPGA 开发板veek-mt-sockit(1)

(1)连接电源12v,并且连接USB-Blaster II,如图: 此时会出现unknown device ,我们需要安装USB-Blaster II的驱动程序,右键“更新驱动软件”,选择安装quarters II的位置\<Quartus II installation directory>\drivers\ usb-blaster-ii,然后点击安装,后即可                                   (2)下载程序进入开发板 打开 Quartus II 软件 ,选择