一、时序设计

方法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 学习笔记的更多相关文章

  1. Xilinx约束学习笔记(一)—— 约束方法学

    <Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...

  2. FPGA学习笔记(二)——FPGA学习路线及开发流程

    ###### [该随笔部分内容转载自小梅哥]       ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...

  3. Xilinx约束学习笔记(二)—— 定义时钟

    2. 定义时钟 2.1 关于时钟 为了获得最佳精度路径覆盖信息,必须正确定义时钟. 时钟要定义在时钟树的根 pin 或 port 上,称为 source point. 时钟的边缘应该由周期和波形进行组 ...

  4. FPGA学习笔记(一)——初识FPGA

    ###### [该随笔部分内容转载自小梅哥]       ######### FPGA(Field-Programmable Gate Array,现场可编程门阵列),正如其名,FPGA内部有大量的可 ...

  5. FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程(转)

    很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序也能继续运行.这是因为对MCU烧写固件 的实质就是将程序固件写入到M ...

  6. Xilinx约束学习笔记(三)—— 时序概念

    3. 时序概念 发现对于时序基础的介绍这一块,Intel 的文档竟然要比 Xilinx 的详细,因此引用了很多 Intel 的文档内容. 3.1 术语 发送沿(launch edge),指用来发送数据 ...

  7. FPGA学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)

    FPGA设计的是数字逻辑,在开始用HDL设计之前,需要先了解一下基本的数字逻辑设计-- 一门抽象的艺术. 现实世界是一个模拟的世界,有很多模拟量,比如温度,声音······都是模拟信号,通过对模拟信号 ...

  8. FPGA学习笔记(七)——FSM(Finite State Machine,有限状态机)设计

    FPGA设计中,最重要的设计思想就是状态机的设计思想!状态机的本质就是对具有逻辑顺序和时序规律的事件的一种描述方法,它有三个要素:状态.输入.输出:状态也叫做状态变量(比如可以用电机的不同转速作为状态 ...

  9. FPGA学习笔记(八)—— 状态机设计实例之独立按键消抖

    ###### [该随笔中部分内容转载自小梅哥] ######### 独立按键消抖自古以来在单片机和FPGA中都是个不可避免的问题,首先,解释一下什么叫做按键抖动,如图,按键在按下和松开的那个瞬间存在大 ...

随机推荐

  1. ASP.NET Core 2.2 基础知识(十二) 发送 HTTP 请求

    可以注册 IHttpClientFactory 并将其用于配置和创建应用中的 HttpClient 实例. 这能带来以下好处: 提供一个中心位置,用于命名和配置逻辑 HttpClient 实例. 例如 ...

  2. java常见异常归纳

    1.java.lang.NullPointerException(空指针异常)    调用了未经初始化的对象或者是不存在的对象 经常出现在创建图片.调用数组这些操作中,比如图片未经初始化,或者图片创建 ...

  3. Servlet 3.1 规范

    在线版目录 Servlet3.1规范翻译——前言 Servlet3.1规范翻译——概览 Servlet3.1规范翻译——Servlet Context Servlet3.1规范翻译——Response ...

  4. BSGS与二次剩余

    BSGS $Big\ Step\ Giant\ Step$,大步小步法,一种在$O(\sqrt{p})$内求解方程$a^x\equiv b (mod\ p)$的算法. 先考虑$p$为质数的情况. 令$ ...

  5. python3 开发面试题(%s和format的区别)5.31

    在格式化字符串中有两种方法: 1.%s 2.format 大家常用的是哪一种方法?为什么要用你选的这种方法? 我们先看一个例子: 首先我们定义一个我军需要击杀的恐怖分子的地理坐标为 c=(128,12 ...

  6. 大规模请求下,Linux 服务器连接数优化设置

    作者:heiyeluren 一般一个大规模Linux服务器请求数可能是几十万上百万的情况,需要足够的连接数来使用,所以务必进行相应的设置. 默认的Linux服务器文件描述符等打开最大是1024,用 u ...

  7. 使用ReadOnlyCollection创建只读集合

    转载:http://www.cnblogs.com/abatei/archive/2008/02/04/1064102.html 使用泛型创建只读集合 问题 您希望类中的一个集合里的信息可以被外界访问 ...

  8. [SpringMVC+redis]自定义aop注解实现控制器访问次数限制

    原文:http://www.cnblogs.com/xiaoyangjia/p/3762150.html?utm_source=tuicool 我们需要根据IP去限制用户单位时间的访问次数,防止刷手机 ...

  9. Array.apply 方法的使用

    Array.apply(null, {length: 5}) length为特殊字段,意思是生成一个长度为5的数组,由于没赋值,所以都是undefined; 如果要赋值,可以这样 console.lo ...

  10. javascript(JQuery)元素操作

    html代码如下: <div id="picK"> <ul> <li style="float:left;width:90px;" ...