//////////////////////////////////////////////////////////////////////////////////
//
// The ZYNQ FIFO slave settings:
// - implements write state machine for 32-bit addressable AXI slave
// - provides settings for state of per-stream fifo pointers
// - implements configuration of FIFO's physical DDR addresses
////////////////////////////////////////////////////////////////////////////////// module zf_slave_settings
#(
parameter CONFIG_BASE = 'h40000000
)
(
input clk,
input rst, //------------------------------------------------------------------
//-- control write signals - slave
//------------------------------------------------------------------
input [:] AXI_AWADDR,
input AXI_AWVALID,
output AXI_AWREADY,
input [:] AXI_WDATA,
input [:] AXI_WSTRB,
input AXI_WVALID,
output AXI_WREADY,
output [:] AXI_BRESP,
output AXI_BVALID,
input AXI_BREADY, //------------------------------------------------------------------
// settings interface
//------------------------------------------------------------------
output reg [:] addr,
output reg [:] data,
output strobe, output [:] debug
); ////////////////////////////////////////////////////////////////////////
///////////////////////////// Begin R T L //////////////////////////////
//////////////////////////////////////////////////////////////////////// //------------------------------------------------------------------
// Control write state machine responds to AXI control writes
// Used for setting the state of the various FIFOs
//------------------------------------------------------------------
localparam STATE_ADDR = ;
localparam STATE_DATA = ;
localparam STATE_WRITE = ; reg [:] state; always @(posedge clk) begin
if (rst) begin
state <= STATE_ADDR;
addr <= ;
data <= ;
end
else case (state) STATE_ADDR: begin
if (AXI_AWVALID && AXI_AWREADY) begin
addr <= (AXI_AWADDR - CONFIG_BASE);
state <= STATE_DATA;
end
end STATE_DATA: begin
if (AXI_WVALID && AXI_WREADY) begin
data <= AXI_WDATA;
state <= STATE_WRITE;
end
end STATE_WRITE: begin
state <= STATE_ADDR;
end default: state <= STATE_ADDR; endcase //state
end assign strobe = (state == STATE_WRITE); //assign to slave write
assign AXI_AWREADY = (state == STATE_ADDR);
assign AXI_WREADY = (state == STATE_DATA);
assign AXI_BRESP = ;
assign AXI_BVALID = AXI_BREADY; //FIXME - we can choose not to assert valid endmodule //zf_slave_settings

配合使用的RTL代码如下

//----------------------------------------------------------------------
//-- A settings register is a peripheral for the settings register bus.
//-- When the settings register sees strobe abd a matching address,
//-- the outputs will be become registered to the given input bus.
//---------------------------------------------------------------------- module setting_reg
#(parameter my_addr = ,
parameter awidth = ,
parameter width = ,
parameter rst_idel=)
(input clk, input rst, input strobe, input wire [awidth-:] addr,
input wire [:] in_data,
output reg [width-:] out_data, output reg changed); always @(posedge clk)
if(rst)
begin
out_data <= rst_idel;
changed <= 'b0;
end
else
if(strobe & (my_addr==addr))
begin
out_data <= in_data[width-:];
changed <= 'b1;
end
else
changed <= 'b0; endmodule // setting_reg

简化版的AXI-LITE4和配合使用的RTL的更多相关文章

  1. 自定义AXI总线形式SPI接口IP核,点亮OLED

    一.前言 最近花费很多精力在算法仿真和实现上,外设接口的调试略有生疏.本文以FPGA控制OLED中的SPI接口为例,重新夯实下基础.重点内容为SPI时序的RTL设计以及AXI-Lite总线分析.当然做 ...

  2. Zynq-PL中创建AXI Master接口IP及AXI4-Lite总线主从读写时序测试(转)

    转载:原文  http://www.eefocus.com/antaur/blog/17-08/423751_6cc0d.html 0. 引言 通过之前的学习,可以在PL端创建从机模式的AXI接口IP ...

  3. verilog RTL编程实践之四

    1.verilog平时三个级别: 1.gate level: and or not xor 2.RTL level: reg comb seq 3.behavior:+ – * / 2.system ...

  4. AXI总线协议

    AXI总线协议 (一).概述 AXI (高性能扩展总线接口,Advanced eXtensible Interface)是ARM AMBA 单片机总线系列中的一个协议,是计划用于高性能.高主频的系统设 ...

  5. 机器学习——支持向量机(SVM)之拉格朗日乘子法,KKT条件以及简化版SMO算法分析

    SVM有很多实现,现在只关注其中最流行的一种实现,即序列最小优化(Sequential Minimal Optimization,SMO)算法,然后介绍如何使用一种核函数(kernel)的方式将SVM ...

  6. Android MarginEnd与MarginStart (RTL)

    Android MarginLeft与MarginStart的区别http://blog.csdn.net/zhufuing/article/details/40181815 在写layout布局的时 ...

  7. Delphi控件之---UpDown以及其与TEdit的配合使用(比如限制TEdit只能输入数字,还有Object Inspector之组件属性的介绍)

    最近在开发中使用到了UpDown这个控件,但是因为之前没有使用过,所以很不熟悉,于是就编写了一个简单的demo来学习UpDown以及其结合TEdit的用法. 初步的常用功能的简介 目前(2015.08 ...

  8. ajax分页与组合查询配合使用

    使用纯HTML页与js.ajax.Linq实现分页与组合查询的配合使用 <body> <div id="top"><input type=" ...

  9. bidi(双向文字)与RTL布局总结

    BIDI 双向文字就是一个字符串中包含了两种文字,既包含从左到右的文字又包含从右到左的文字. 大多数文字都是从左到右的书写习惯,比如拉丁文字(英文字母)和汉字,少数文字是从右到左的书写方式比如阿拉伯文 ...

随机推荐

  1. ES6走一波 Proxy/Reflect

    Proxy:像拦截器,对目标对象修改等进行拦截,是一种元编程(meta programming),即修改JS语言本身. //生成proxy实例,两个参数都是对象,targetObj是要拦截的目标对象, ...

  2. VMware 11安装Mac和Linux

    VMware 11安装Mac OS X 10.10_百度经验 https://jingyan.baidu.com/article/ff411625b9011212e48237b4.html?qq-pf ...

  3. java在进程启动和关闭.exe程序

    /** * @desc 启动进程 * @author zp * @date 2018-3-29 */ public static void startProc(String processName) ...

  4. Linux 如何通过命令查看一个文件的某几行(中间几行或最后几行)

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...

  5. 20165325 2017-2018-2 《Java程序设计》第七周学习总结

    一.教材学习笔记 ch11 1.连接数据库 2.条件与排序查询: where子语句 一般格式:select 字段 from 表名 where 条件 排序:用order by子语句对记录排序 3.更新. ...

  6. SpringSecurity实现用户名密码登录(Token)

    传统的应用是将Session放在应用服务器上,而将生成的JSESSIONID放在用户浏览器的Cookie中,而这种模式在前后端分离中就会出现以下问题 1,开发繁琐. 2,安全性和客户体验差 3,有些前 ...

  7. Unity3D之Mesh(四)绘制多边形

    来自https://www.cnblogs.com/JLZT1223/p/6086191.html 1. 总的来说绘制平面的思想十分简单,就是将需要的平面拆分成几个三角形然后进行绘制就可以啦,主要的思 ...

  8. 【转】Java并发编程:如何创建线程?

    一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认是java.exe或者javaw.exe(windows下可以通过 ...

  9. MinGW GCC 6.3.0 2017年3月份出炉啦

    MSYS_MinGW-w64_GCC_630_x86-x64_Full 发布日期: 2017-03-07 08:48 68264 KB 下载地址: http://xhmikosr.1f0.de/too ...

  10. linux下.bashrc文件 /PATH环境变量修改 /提示符修改

    1) .bashrc文件 在linux系统普通用户目录(cd /home/xxx)或root用户目录(cd /root)下,用指令ls -al可以看到4个隐藏文件, .bash_history   记 ...