FPGA学习笔记01 | 基础定义&组合时序概念

目录

FPGA定义

数字电路

组合逻辑

时序逻辑


FPGA定义

FPGA 全称为 Field Programme Gate Array , 现场可编程逻辑门阵列。

用通俗的语言来说,FPGA更像是有很多的积木块儿,开发者根据需要实现的目标,来选择用哪些积木来搭建这个建筑。

由此可见,根据开发者自选积木(对应开发当中的IP)来组合功能,我们可以得到FPGA灵活、可编程(也就是组合不同IP)的特点。

现场这个特点呢,主要是说可以随时重复写入。

门阵列是指的FPGA内部有大量的LUT(Look up table查找表),这样就会免除很多的计算,直接把结果写在查找表里面。

数字电路

数字电路是离散化后的结果,只有0和1。模拟电路是我们现实生活中看到的连续不断,比如看到的正弦电压曲线就是模拟电压的变换过程。那么在数模转换的时候,怎么区分是转为0还是转为1呢?这时候需要一个裁决电平,如果比这个电平高,那么就为1;如果比这个电平低,就为0,可以实现模拟向数字的转化。

至于这个电平具体是多少,其实存在很多工业当中的电平标准:TTL, CMOS, LVTTL, LVCMOS, ECL, PECL, LVDS, HSTL, SSTL。

在代码中,数字设计分为组合逻辑与时序逻辑两大类。

组合逻辑

组合逻辑的输出仅仅与当前输入有关系,是不需要寄存器(reg)的,一个很简单的判断方法是看电路当中有没有时钟信号。

组合逻辑当中是有逻辑门电路组成的,常见的逻辑门包括与门(AND)、非门(NOT,INVERTER / INV)、或门(OR)、异或门(XOR)、与非门(NAND)、或非门(NOR)等等。

时序逻辑

时序逻辑的输出不仅和当前输入有关,也和上一个状态有关,也就是需要寄存器储值,如果电路图当中存在时钟信号,那么就是时序逻辑。

可能只是说与上一个状态有关有些抽象,那么以一个电路图来解释可能更加形象一些。

如下图1所示,此时或非门的输入是a和y,也就是说,上一个状态(前一个输出结果y)会影响到当前输出(作为其中一个输入),那么这就不是一个组合电路,但是和时序电路也有一定的差距,我们需要在上方的电线上加一个reg,来存储上一个y的状态,这样才算是一个时序电路了。

图1 电路图展示

时序逻辑电路是根据时钟信号触发的,这个过程需要用到触发器,存在两种触发类型:电平触发边沿触发。(触发器我会在下一篇写)

电平触发就是检测电平为高电平1,或者为低电平0的时候有效,在代码中可以这样写eg.

always @ ( clk ) begin     //clk为高电平有效
...                        //省略内部逻辑
end


always @ ( !clk ) begin    //clk为低电平有效
...                        //省略内部逻辑
end

//是注释符号的意思

!和~都是取反符号,!是直接取反,如果clk为真,取反后为0。

~是按位取反,因为时钟信号都是1bit的,所以这里用哪个都可以。按位取反是把每一位都取反后返回。

!1001 = 0

~ 1001 =  0110

边沿触发就是检测时钟信号的上升沿或者下降沿有效,代码中可以这样写eg.

always @ ( posedge clk ) begin     //clk为上升沿有效
...                                //省略内部逻辑
end


always @ ( negedge clk ) begin    //clk为低电平有效
...                               //省略内部逻辑
end

posedge是上升沿的关键词

negedge是下降沿的关键词

事实上呢,组合逻辑与时序逻辑并不是互斥存在的,而是互补同时存在于数字电路当中的,例如常见的状态机转换(FSM)电路。

小梅哥在学习Xilinx FPGA期间进行了积极的探索,特别是对Cyclone V SOC的开发流程进行了学习。从裸机到基于Linux嵌入式系统,小梅哥实现了FPGA和ARM Cortex-A9 CPU之间的双向控制和数据传输。 在代码编写方面,小梅哥设计了一个名为mux2的模块,用于实现二选一多路器。模块包含了输入和输出端口,并通过assign语句实现了信号的赋值。 在激励文件中,小梅哥使用reg和wire定义了输入和输出信号,并通过mux2模块进行了实例化。然后,通过initial块生成了一系列的激励信号,对模块进行仿真。 总结来说,小梅哥在Xilinx FPGA学习笔记中记录了自己对Cyclone V SOC的学习、代码编写和激励文件的使用。这些学习内容对于理解FPGA开发流程以及实现特定功能非常有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FPGA自学笔记——设计与验证VIP版.pdf](https://download.youkuaiyun.com/download/qq_30307853/11656682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [小梅哥Xilinx FPGA学习笔记1——二选一多路器](https://blog.youkuaiyun.com/weixin_42454243/article/details/122026484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值