Xilinx FPGA 学习笔记
一、时序设计
方法1.通过状态机来实现,通过verilog控制FPGA,让它该快的时候快,该慢的时候慢。
方法2.FPGA中运行CPU
把逻辑控制顺序复杂的事情用C代码来实现,而实时处理部分用verilog实现,并且verilog这部分可以被C代码控制。Xilinx的FPGA目前支持的CPU有Microblaze,ARM9,POWERPC,其中Microblaze是软核,其余的两款是硬核。
(1)软核就是用代码实现的CPU核,配置灵活;
(2)硬核就是一块电路,已经做好了,不能再发生变化;
软核灵活性好,但是要占用FPGA的资源。硬核不占用FPGA的资源,速度和性能更好。比如Xilinx的DDR内存控制器,就是一种硬核,其运行速度很高。
二、基础语法
1. always @(),括号里是*,表明是一直敏感的;
2. (1) <= 非阻塞赋值,在一个always模块中,所有语句一起更新
(2) = 阻塞赋值,或者给信号赋值,如果在always模块中,这条语句被立刻执行。
非阻塞赋值
always @(posedge clk)begin
a <= b;
c <= a;
end
执行结果是a的值是b,c的结果依旧是a
阻塞赋值
always @(posedge clk)begin
a = b;
c = a;
end
执行结果a的值是b,c的结果也是b。
一般我们使用的都是非阻塞的赋值语句,这样可以很好地控制同步性。
3、预处理命令
`include file1.v
`define X=1;
`define Y;
`ifdef Y
Z = 1;
`else
Z = 0;
`endid
有时候需要一些公共的宏参数,我们可以放在一个文件中,比如文件名XXX.v,。那么我们就可以 `include XXX.v ,就可以包含文件中定义的宏参数
三、小练习
1.加法器的设计
module adder(
input [3:0] a,
input [3:0] b,
input cin,
output [3:0] sum,
output cout
); assign {cout,sum} = a + b + cin;
endmodule
RTL视图

RTL 技术原理图

仿真代码
`timescale 1ns / 1ps //1ns的仿真刻度,1ps的仿真精度
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2017/10/22 10:47:58
// Design Name:
// Module Name: simu
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////// module simu( ); reg [3:0] a;
reg [3:0] b;
reg cin; wire cout;
wire [3:0] sum; reg [4:0] i,j; //中间变量 adder inst(
.a(a),
.b(b),
.cin(cin),
.cout(cout),
.sum(sum) ); initial begin
a =0; b=0; cin=0;
for(i=1;i<16;i=i+1)
#10 a = i;
end initial begin
for(j=1;j<16;j=j+1)
#10 b = j;
end initial begin
$monitor($time,,,"%d + %d + %b = {%b,%d}",a,b,cin,cout,sum);
#160 $finish; //160ns 后仿真结束
end endmodule
仿真波形

打印输出结果

转载自:https://www.mianbaoban.cn/blog/post/205279?utm_source=EETC%20Forum%20Alert&utm_medium=Email&utm_campaign=2017-10-25
Xilinx FPGA 学习笔记的更多相关文章
- Xilinx约束学习笔记(一)—— 约束方法学
<Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...
- FPGA学习笔记(二)——FPGA学习路线及开发流程
###### [该随笔部分内容转载自小梅哥] ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...
- Xilinx约束学习笔记(二)—— 定义时钟
2. 定义时钟 2.1 关于时钟 为了获得最佳精度路径覆盖信息,必须正确定义时钟. 时钟要定义在时钟树的根 pin 或 port 上,称为 source point. 时钟的边缘应该由周期和波形进行组 ...
- FPGA学习笔记(一)——初识FPGA
###### [该随笔部分内容转载自小梅哥] ######### FPGA(Field-Programmable Gate Array,现场可编程门阵列),正如其名,FPGA内部有大量的可 ...
- FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程(转)
很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序也能继续运行.这是因为对MCU烧写固件 的实质就是将程序固件写入到M ...
- Xilinx约束学习笔记(三)—— 时序概念
3. 时序概念 发现对于时序基础的介绍这一块,Intel 的文档竟然要比 Xilinx 的详细,因此引用了很多 Intel 的文档内容. 3.1 术语 发送沿(launch edge),指用来发送数据 ...
- FPGA学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)
FPGA设计的是数字逻辑,在开始用HDL设计之前,需要先了解一下基本的数字逻辑设计-- 一门抽象的艺术. 现实世界是一个模拟的世界,有很多模拟量,比如温度,声音······都是模拟信号,通过对模拟信号 ...
- FPGA学习笔记(七)——FSM(Finite State Machine,有限状态机)设计
FPGA设计中,最重要的设计思想就是状态机的设计思想!状态机的本质就是对具有逻辑顺序和时序规律的事件的一种描述方法,它有三个要素:状态.输入.输出:状态也叫做状态变量(比如可以用电机的不同转速作为状态 ...
- FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖
###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...
随机推荐
- JAVA net 笔记
1.InetAddress 获取主机ip等 2.URL 3.URLConnection (url.openConnection() 创建对象) 4.BufferedReader 5.InputStre ...
- 【动态规划】bzoj1613 [Usaco2007 Jan]Running贝茜的晨练计划
#include<cstdio> #include<algorithm> using namespace std; #define N 10001 int n,m,a[N],f ...
- 【DFS序】【莫队算法】【权值分块】bzoj2809 [Apio2012]dispatching
题意:在树中找到一个点i,并且找到这个点子树中的一些点组成一个集合,使得集合中的所有点的c之和不超过M,且Li*集合中元素个数和最大 首先,我们将树处理出dfs序,将子树询问转化成区间询问. 然后我们 ...
- 金融应用,计算未来投资回报值 Exercise06_07
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:金融应用,计算未来投资回报值 * */ public class Exer ...
- Problem B: 调用函数,输出100到200之间的所有素数
#include <stdio.h> int isPrime(unsigned int n)//定义素数函数 { int i; || n == ) ; ; i * i <= n; i ...
- iOS开发——异常:[__NSCFNumber length]: unrecognized selector sent to instance
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumbe ...
- Java读取文本文件
try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw StringBuilder stringBuilder = new StringBuilder(); // 读入 ...
- 一个页面如何放多个百度编辑器 Ueditor 1.4.3?PHP如何获取Ueditor 的值?
问题1:一个页面如何放置多个Ueditor? 参考代码如下: <form method="post" action="save.php"> < ...
- 直接拿来用!最火的Android开源项目(一)
GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上.更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要.利用这些项目,有时能够让你 ...
- Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得 --转
Silverlight游戏设计(Game Design):(十四)练习用游戏素材资源的获取及相关工具使用心得 通过前6节的Demo制作演示,大家应该已经相当熟悉这款Silverlight-2D游戏场景 ...