本文原创,转载请注明出处: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_ARITH.ALL;
4 use IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6 entity clock_gen is
7 port (
8 clk : IN STD_LOGIC;
9 rst : IN STD_LOGIC;
10 clka : OUT STD_LOGIC
11 );
12 end clock_gen;
13
14 architecture Behavioral of clock_gen is
15 signal cnt : INTEGER;
16 signal clk_reg : STD_LOGIC;
17
18 begin
19 clka<=clk_reg;
20 process(clk,rst)
21 begin
22 if (rst='0') then
23 cnt<=0;
24 clk_reg<='0';
25 elsif (clk'event and clk='1') then
26 if (cnt=250000) then --生成时钟为0.01s
27 cnt<=0;
28 clk_reg<=not clk_reg;
29 else
30 cnt<=cnt+1;
31 end if;
32 end if;
33 end process;
34 end Behavioral;

2.2相位累加(地址生成)

 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 phase_adder is
7 port(
8 clka : IN STD_LOGIC;
9 rst : IN STD_LOGIC;
10 f_level : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
11 addr : OUT STD_LOGIC_VECTOR(9 DOWNTO 0)
12 );
13 end phase_adder;
14
15 architecture Behavioral of phase_adder is
16 signal cnt : STD_LOGIC_VECTOR(9 DOWNTO 0);
17
18 begin
19 addr<=cnt;
20 process(clka,rst,f_level)
21 begin
22 if (rst='0') then
23 cnt<=(others=>'0');
24 elsif (clka'event and clka='1') then
25 cnt<=cnt+f_level;
26 end if;
27 end process;
28
29 end Behavioral;

2.3 ROM

新建源文件选择IP核

存储类型

存储大小

数据初始化

正弦余弦初始化coe文件的生成(使用matlab)

 1 clc
2 clear all
3 close all
4 x = linspace(0, 2*pi ,1024); % 在区间[0,2*pi]之间等间隔地取1024个点
5 y_cos = cos(x);
6 y_sin = sin(x);
7 y_cos = y_cos * 2^15;
8 y_sin = y_sin * 2^15;
9 fid = fopen('D:/cos.coe','wt');
10 fprintf(fid, '%5.0f,\n' , y_cos);
11 fclose(fid);
12 fid = fopen('D:/sin.coe','wt');
13 fprintf(fid, '%5.0f,\n' , y_sin);
14 fclose(fid);

用记事本在生成文件开头添加

并把最后的结尾换为 ; 号

存储器选项都设置完毕后点击generate即可。

2.4 LED显示(DAC)

 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 use IEEE.STD_LOGIC_SIGNED.ALL;
6
7 entity led is
8 port (
9 data : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
10 led_seg : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
11 );
12 end led;
13
14 architecture Behavioral of led is
15 begin
16 process(data)
17 begin
18 if (signed(data)<-24576) then
19 led_seg<="10000000";
20 elsif (signed(data)<-16348) then
21 led_seg<="01000000";
22 elsif (signed(data)<-8192) then
23 led_seg<="00100000";
24 elsif (signed(data)<0) then
25 led_seg<="00010000";
26 elsif (signed(data)<8192) then
27 led_seg<="00001000";
28 elsif (signed(data)<16348) then
29 led_seg<="00000100";
30 elsif (signed(data)<24576) then
31 led_seg<="00000010";
32 else
33 led_seg<="00000001";
34 end if;
35 end process;
36
37 end Behavioral;

2.5 顶层设计TOP

 1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
3
4 entity top is
5 port (
6 clk : IN STD_LOGIC;
7 rst : IN STD_LOGIC;
8 f_level : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
9 led_seg : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
10 );
11 end top;
12
13 architecture Behavioral of top is
14 COMPONENT clock_gen
15 PORT (
16 clk : IN STD_LOGIC;
17 rst : IN STD_LOGIC;
18 clka : OUT STD_LOGIC
19 );
20 END COMPONENT;
21 COMPONENT phase_adder
22 PORT (
23 clka : IN STD_LOGIC;
24 rst : IN STD_LOGIC;
25 f_level : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
26 addr : OUT STD_LOGIC_VECTOR(9 DOWNTO 0)
27 );
28 END COMPONENT;
29 COMPONENT rom
30 PORT (
31 clka : IN STD_LOGIC;
32 addra : IN STD_LOGIC_VECTOR(9 DOWNTO 0);
33 douta : OUT STD_LOGIC_VECTOR(15 DOWNTO 0)
34 );
35 END COMPONENT;
36 COMPONENT led
37 PORT (
38 data : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
39 led_seg : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
40 );
41 END COMPONENT;
42
43 signal clka : STD_LOGIC;
44 signal addr : STD_LOGIC_VECTOR(9 DOWNTO 0);
45 signal data : STD_LOGIC_VECTOR(15 DOWNTO 0);
46
47 begin
48 u1 : clock_gen PORT MAP (clk,rst,clka);
49 u2 : phase_adder PORT MAP (clka,rst,f_level,addr);
50 u3 : rom PORT MAP (clka,addr,data);
51 u4 : led PORT MAP (data,led_seg);
52
53 end Behavioral;

3. 引脚定义

 1 NET    "clk"                LOC="B8";
2 NET "rst" LOC="P11";
3
4 NET "f_level<0>" LOC="L3";
5 NET "f_level<1>" LOC="K3";
6 NET "f_level<2>" LOC="B4";
7 NET "f_level<3>" LOC="G3";
8 NET "f_level<4>" LOC="F3";
9 NET "f_level<5>" LOC="E2";
10 NET "f_level<6>" LOC="N3";
11
12 NET "led_seg<0>" LOC="M5";
13 NET "led_seg<1>" LOC="M11";
14 NET "led_seg<2>" LOC="P7";
15 NET "led_seg<3>" LOC="P6";
16 NET "led_seg<4>" LOC="N5";
17 NET "led_seg<5>" LOC="N4";
18 NET "led_seg<6>" LOC="P4";
19 NET "led_seg<7>" LOC="G1";

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

  1. FPGA课设-基于Xilinx Basys2开发板的除法器设计

    介绍一下Basys开发板: Basys2 FPGA开发板是一个电路设计实现平台,任何人都可以通过它来搭建一个真正的数字电路.Basys2是围绕着一个Spartan-3E FPGA芯片和一个Atmel ...

  2. 基于Basys2开发板的简易电子琴和音乐播放器设计

    背景:华中科技大学 电测综合实验 主要功能:Basys2开发板外接一个扬声器(或无源蜂鸣器也可)实现电子琴和音乐播放器的功能.其中由于开发板上只有4个按键,所以电子琴功能只做了4个音调,分别对应于4个 ...

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

    我用的是ZYNQ7010的开发板,纯粹是入门学习,对于初学者,使用较多的xlinx入门级的开发板一般是zynq7000系列,淘宝上买的较好的是黑金和米联科,我买的就是黑金的,个人觉得教程很少,学习资料 ...

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

    本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小L ...

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

    目录 1.注意事项 2.设备简介 3.引脚分配 注意事项: ① 插拔下载线时必须断电! ② Quartus II 软件和 NIOS 软件的版本必须一致,并安装在同一个目录下面,安装目录不要有中文和空格 ...

  6. 嵌入式开发之zynq——赛灵思的一款两a9加一fpga芯片的开发板

    没办法,回家入职新公司,做通信的,用到这款zynq加ad9163射频架构的开发版,要我做驱动,这可是初次接触zynq,带fpga的集成芯片,心里还是有点惊喜和忧愁,忧愁怎么最快啃下这个硬骨头,好吧上网 ...

  7. python开发环境配置和python源码打包生成exe可执行文件

    Windows下开发环境准备 1.分别安装:python2和python32.安装Python的集成工具:Anaconda3.安装Pycharm Pycharm设置 设置: File->Sett ...

  8. CrazyBingo mini VIP 2.0 视频开发板 NIOS移植例程(原创)

    创建一个NIOS环境 注意事项 前言:(先了解下硬件) 本板卡目前主要适合以下几类人: (1)对FPGA 逻辑开发有强烈的兴趣,并且有一定的HDL基础 (2)计划采用FPGA图像架构,学习并研究图像算 ...

  9. s3c2140 开发板笔记

    文章目录 原理图补充说明 开机串口输出 开发板硬件配置 参考文档 工具下载 代码下载 安装交叉编译器 编译kernel 制作文件系统 配置nfs 配置smb Minimal client-only S ...

随机推荐

  1. DNS重绑定DNS Rebinding攻击

    DNS重绑定DNS Rebinding攻击 在网页浏览过程中,用户在地址栏中输入包含域名的网址.浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户.而对于域名所有 ...

  2. Maven的构建/测试/打包

    继上一篇http://www.cnblogs.com/EasonJim/p/6809882.html使用Maven创建工程后,接下来是使用Maven进行构建/测试/打包. 在打包之前,先熟悉一下Mav ...

  3. Oracle hidden costs revealed, Part2 – Using DTrace to find why writes in SYSTEM tablespace are slower than in others

    http://blog.tanelpoder.com/2008/09/02/oracle-hidden-costs-revealed-part2-using-dtrace-to-find-why-wr ...

  4. javascript 函数初探 (五)--- 几种类型的函数

    即时函数: 目前我们已经讨论了匿名函数在回调时的应用.接下来,我们来看看匿名函数的另一种应用实例 --- javascript即时函数: 比如: ( function(){ alert('her'); ...

  5. 邁向IT專家成功之路的三十則鐵律 鐵律二十九 IT人富足之道-信仰

    天地自然的循環法則,讓每一個人都必須經歷生.老.病.死.喜.怒.哀.樂,然而至始至終無盡的煩惱總是遠多於快樂,因此筆者深信每一個人在一生當中,都必須要有適合自己的正確信仰,他可以在你無法以物質力量來解 ...

  6. dubbo常见问题解答FAQ

    常见问题解答 1. 如果服务注册不上怎么办? 2. 出现RpcException: No provider available for remote service异常怎么办? 3. 出现调用超时co ...

  7. 一天时间用OpenFire打造自己的IM聊天工具

    Openfire采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.Openfire安装和使用都非常简单,并利用Web进行管理.单台服务器可支持上万并发用户. 好友界面 ...

  8. 基于ACIS/HOOPS的3D应用开发简介 【转】

    (整理) 平台:                造型引擎——ACIS         显示引擎——Direct3D/OpenGL/GDI         应用框架——HOOPS   组件关系图     ...

  9. [转载] C/C++中怎样获取日期和时间

    C/C++中怎样获取日期和时间摘要:  本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时.时间的获取.时间的计算和显示格式等方面进行了阐述.本文还通过大量的 ...

  10. 从头写一个Cucumber测试(二) Cucumber Test

    转载:https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/cucumber-test-part-2 承接上文   前一篇博 ...