20220904.学习记录
20220904.学习记录
ZYNQ学习笔记
AXI接口简介
摘自UG1037和IHI0022D
AXI介绍:
AXI(高级可扩展接口),是ARM AMBA的一部分;
AMBA:高级微控制器总线架构;是1996年首次引入的一组微控制器总线;
开放的片内互联的总线标准,能在多主机设计中实现多个控制器和外围设备之间的连接和管理。
AXI三种类型:
AXI(AXI-FULL):用于高性能的存储器映射需求;
(存储器映射:主机在对从机进行读写操作时,指定一个目标地址,这个地址对应系统存储空间的地址,表示对该空间进行读写操作)
AXI4-Lite:简化版的AXI4接口,用于低吞吐率存储器映射的通信
AXI4-Stream(ST):拥有高速的流数据通信
AXI的优点
生产力
灵活性:AXI4(支持突发256)和AXI-Lite(1个数据)都属于存储器映射,AXI4-ST不属于存储器映射,它的突发长度不受限制
可获得性
AXI的工作方式
AXI4和AXI4-Lite包含5个独立的通道
读地址通道
读数据通道
写地址通道
写数据通道
写响应通道
AXI4:由于读写地址通道是分离的,所以支持双向同时传输;突发长度最大256
AXI-Lite:和AXI4比较类似,但是不支持突发传输
AXI4-Stream:只有一个单一数据通道,和AXI4的写数据通道比较类似,突发长度不受限制
AXI InterConnect和AXI SmartConnect
这两个IP核都用于连接单/多个存储器映射的AXI Master和单/多个存储器映射的AXI Slave
AXI的通道定义
每一个独立的通道都包含一组信息信号、VALIAD信号和READY信号,
用于提供双向的握手机制
信息的源端使用VALID信号表示当前通道地址、数据和控制信息什么时候有效
目的端使用READY信号表示什么时候可以接受信息
读数据通道和写数据通道都包含一个 LAST信号,用于表示传输的最后一个数据
读数据通道和写数据通道都包含各自的地址通道,地址通道携带了请求所需的地址和信息
读数据通道由从机发送给主机,包含了读数据和读响应的信息,读响应的信号用于表示读传输是否操作完成
写数据通道由主机发送给从机,包含了写数据,然后通过WSTRB信号表示当前数据的哪个字节有效
写响应通道由从机发送给主机,包含了写响应信号,用于表示当前写操作是否完成
握手机制
所有的五个通道都是通过相同的VALID/READY握手处理来控制地址、数据和控制信息,双向握手的机制意味着主机和从机之间传输数据时,都可以控制传输的速率,只有当VALID和READY同时为高电平时,传输才会发生
AXI4-Lite
适用于当不需要AXI4完整功能的时候,一些简单的控制寄存器的读写
EECS151学习笔记
数字集成电路设计 复习笔记
参考自数字CMOS集成电路设计基础- 华东师范大学
1.2.2 数字设计的功能性和稳定性
- 噪声容限
- 再生性
- 扇入扇出
- 传播延时
- 上升时间和下降时间
- 功耗和能耗:瞬时/峰值/平均功耗
2.1.1 二极管静态和动态特性
2.1.2 MOS晶体管阈值电压和电流方程
FIFO IP核介绍
摘自正点原子教程,视频链接正点原子手把手教你学ZYNQ之FPGA开发篇-基于启明星V2【第一期】
FIFO的英文全称是First In First Out,即先进先出。FPGA使用的FIFO一般指的是对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存,或者高速异步数据的交互也即所谓的跨时钟域信号传递。它与FPGA内部的RAM和ROM的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式,使用起来简单方便,由此带来的缺点就是不能像RAM和ROM那样可以由地址线决定读取或写入某个指定的地址。
同步FIFO:指读时钟和写时钟为同一个时钟,在时钟沿来临时同时发生读写操作。
异步FIFO:指读写时钟不一致,读写时钟是相互独立的
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cROk0Aim-1662345794155)(D:\typora_md\每日学习记录\20220830.学习记录.assets\image-20220903173734989.png)]](https://img-blog.csdnimg.cn/723d93d7876749afbc8939d4a5a63a5d.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4N2HFRLW-1662345794157)(D:\typora_md\每日学习记录\20220830.学习记录.assets\image-20220903173814309.png)]](https://img-blog.csdnimg.cn/a77c1c00b3ab40d68ad440bb14ce2cfc.png)
fifo_wr:
`timescale 1ns / 1psmodule fifo_wr(input clk,input rst_n,input almost_empty,input almost_full,output reg fifo_wr_en,output reg [7:0] fifo_wr_data);reg almost_empty_d0;
reg almost_empty_syn;
reg [1:0] state;
reg [3:0] dly_cnt;
wire syn;assign syn = ~almost_empty_syn&almost_empty_d0; //上升沿抓取always @(posedge clk or negedge rst_n)beginif(!rst_n)beginalmost_empty_d0 <= 1'b0; almost_empty_syn <= 1'b0; endelse beginalmost_empty_d0 <= almost_empty; //上升沿抓取 almost_empty_syn <= almost_empty_d0; //上升沿抓取 end
endalways @(posedge clk or negedge rst_n)beginif(!rst_n)beginfifo_wr_en <= 1'b0;fifo_wr_data <= 8'b0;state <= 2'b0;dly_cnt <= 4'b0;end else begincase(state)2'd0: beginif(syn) beginstate <= 2'b1;end elsestate <= state;end 2'd1: beginif(dly_cnt == 4'd10)begindly_cnt <= 4'd0;state <= 2'd2;fifo_wr_en <= 1'b1;end elsedly_cnt <= dly_cnt + 1'b1;end2'd2: beginif(almost_full) beginfifo_wr_en <= 1'b0;fifo_wr_data <= 8'b0;state <= 2'b0;endelse beginfifo_wr_en <= 1'b1;fifo_wr_data <= fifo_wr_data + 1'd1;endenddefault: state <= 2'b0;endcaseend
endendmodule
fifo_rd
`timescale 1ns / 1psmodule fifo_rd(input clk,input rst_n,input almost_empty,input almost_full,output reg fifo_rd_en);reg almost_full_d0;
reg almost_full_syn;
reg [1:0] state;
reg [3:0] dly_cnt;
wire syn;assign syn = ~almost_full_syn&almost_full_d0; //上升沿抓取always @(posedge clk or negedge rst_n)beginif(!rst_n)beginalmost_full_d0 <= 1'b0; almost_full_syn <= 1'b0; endelse beginalmost_full_d0 <= almost_full; //上升沿抓取 almost_full_syn <= almost_full_d0; //上升沿抓取 end
endalways @(posedge clk or negedge rst_n)beginif(!rst_n)beginfifo_rd_en <= 1'b0;state <= 2'b0;dly_cnt <= 4'b0;end else begincase(state)2'd0: beginif(syn) beginstate <= 2'b1;end elsestate <= state;end 2'd1: beginif(dly_cnt == 4'd10)begindly_cnt <= 4'd0;state <= 2'd2;end elsedly_cnt <= dly_cnt + 1'b1;end2'd2: beginif(almost_empty) beginfifo_rd_en <= 1'b0;state <= 2'b0;endelse fifo_rd_en <= 1'b1;enddefault: state <= 2'b0;endcaseend
end
ip_fifo
`timescale 1ns / 1psmodule ip_fifo(input sys_clk,
input sys_rst_n);wire almost_empty ;
wire almost_full ;
wire fifo_wr_en ;
wire [7:0] fifo_wr_data ;
wire fifo_rd_en ;
wire [7:0] dout;
wire full;
wire empty;
wire [7:0] rd_data_count;
wire [7:0] wr_data_count;fifo_wr fifo_wr_u(
.clk (sys_clk),
.rst_n (sys_rst_n),
.almost_empty (almost_empty),
.almost_full (almost_full ),
.fifo_wr_en (fifo_wr_en ),
.fifo_wr_data (fifo_wr_data) );fifo_rd fifo_rd_u(
.clk (sys_clk),
.rst_n (sys_rst_n),
.almost_empty (almost_empty),
.almost_full (almost_full),
.fifo_rd_en (fifo_rd_en));fifo_generator_0 fifo_generator_0_u (.wr_clk(sys_clk), // input wire wr_clk.rd_clk(sys_clk), // input wire rd_clk.din(fifo_wr_data), // input wire [7 : 0] din.wr_en(fifo_wr_en), // input wire wr_en.rd_en(fifo_rd_en), // input wire rd_en.dout(dout), // output wire [7 : 0] dout.full(full), // output wire full.almost_full(almost_full), // output wire almost_full.empty(empty), // output wire empty.almost_empty(almost_empty), // output wire almost_empty.rd_data_count(rd_data_count), // output wire [7 : 0] rd_data_count.wr_data_count(wr_data_count) // output wire [7 : 0] wr_data_count
);
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
