//***************************************************************************
// Copyright(c)2016, Lyu Yang
// All rights reserved
//
// File name : wb_xmigddr.v
// Module name :
// Author : Lyu Yang
// Email :
// Date : 2016-12-00
// Version : v1.0
//
// Abstract : DDR Chip Clock Source is 50MHz.
//
// Modification history
// ------------------------------------------------------------------------
// Version Date(yyyy/mm/dd) name
// Description
//
// $Log$
//***************************************************************************
`timescale 1ns / 100ps
module wb_xmigddr (
input wb_clk_i,
input wb_rst_i, // Wishbone Interface
input wb_cyc_i,
input wb_stb_i,
input wb_we_i,
input [:] wb_sel_i,
input [:] wb_adr_i,
input [:] wb_dat_i,
output [:] wb_dat_o,
output wb_ack_o, // DDR Chip Signals
output mcb3_dram_ck,
output mcb3_dram_ck_n,
inout [:] mcb3_dram_dq,
output [:] mcb3_dram_a,
output [:] mcb3_dram_ba,
output mcb3_dram_ras_n,
output mcb3_dram_cas_n,
output mcb3_dram_we_n,
output mcb3_dram_odt,
output mcb3_dram_cke,
output mcb3_dram_dm,
inout mcb3_dram_udqs,
inout mcb3_dram_udqs_n,
output mcb3_dram_udm,
inout mcb3_dram_dqs,
inout mcb3_dram_dqs_n,
inout mcb3_rzq,
inout mcb3_zio
); // DDR DRAM Calib Done
wire c3_calib_done;
// BIU Signals
wire c3_px_cmd_en;
wire [:] c3_px_cmd_instr;
wire [:] c3_px_cmd_byte_addr;
wire c3_px_cmd_full;
wire c3_px_wr_en;
wire c3_px_wr_empty;
wire c3_px_rd_en;
wire c3_px_rd_empty; // Read, Write and Ack Signals
wire wb_req;
reg wb_req_r, wb_ack_write, wb_ack_read; assign wb_req = wb_stb_i & wb_cyc_i & c3_calib_done; always @(posedge wb_clk_i)
wb_req_r <= wb_req & !wb_ack_o; assign wb_req_new = wb_req & !wb_req_r; // Write and Read Ack Signal
always @(posedge wb_clk_i)
wb_ack_write <= wb_req & wb_we_i & !wb_ack_write & !c3_px_cmd_full; always @(posedge wb_clk_i)
wb_ack_read <= wb_req & !wb_we_i & !wb_ack_read & !c3_px_rd_empty; assign wb_ack_o = (wb_we_i ? wb_ack_write : wb_ack_read) & wb_stb_i;
assign c3_px_cmd_instr = {'b00, ~wb_we_i};
assign c3_px_cmd_byte_addr = {wb_adr_i[:], 'b00};
assign c3_px_wr_en = (wb_stb_i & wb_cyc_i & wb_we_i) ? wb_req_new : 'b0;
assign c3_px_rd_en = (wb_stb_i & wb_cyc_i & !wb_we_i) ? wb_ack_read : 'b0;
assign c3_px_cmd_en = (wb_stb_i & wb_cyc_i & wb_we_i) ? wb_ack_write : wb_req_new & !wb_we_i; // Xilinx Spartan6 MIG
mig_spartan6 memc_ddr
(
// controller clock and reset
.c3_sys_clk (wb_clk_i),
.c3_sys_rst_i (wb_rst_i), // user insterface signals
.c3_p0_cmd_clk (wb_clk_i),
.c3_p0_cmd_en (c3_px_cmd_en),
.c3_p0_cmd_instr (c3_px_cmd_instr),
.c3_p0_cmd_bl ('d0),
.c3_p0_cmd_byte_addr (c3_px_cmd_byte_addr),
.c3_p0_cmd_empty (),
.c3_p0_cmd_full (c3_px_cmd_full),
.c3_p0_wr_clk (wb_clk_i),
.c3_p0_wr_en (c3_px_wr_en),
.c3_p0_wr_mask (~wb_sel_i),
.c3_p0_wr_data (wb_dat_i),
.c3_p0_wr_full (),
.c3_p0_wr_empty (c3_px_wr_empty),
.c3_p0_wr_count (),
.c3_p0_wr_underrun (),
.c3_p0_wr_error (),
.c3_p0_rd_clk (wb_clk_i),
.c3_p0_rd_en (c3_px_rd_en),
.c3_p0_rd_data (wb_dat_o),
.c3_p0_rd_full (),
.c3_p0_rd_empty (c3_px_rd_empty),
.c3_p0_rd_count (),
.c3_p0_rd_overflow (),
.c3_p0_rd_error (),
// port1
.c3_p1_cmd_clk (),
.c3_p1_cmd_en ('b0),
.c3_p1_cmd_instr (),
.c3_p1_cmd_bl (),
.c3_p1_cmd_byte_addr (),
.c3_p1_cmd_empty (),
.c3_p1_cmd_full (),
.c3_p1_wr_clk (),
.c3_p1_wr_en ('b0),
.c3_p1_wr_mask (),
.c3_p1_wr_data (),
.c3_p1_wr_full (),
.c3_p1_wr_empty (),
.c3_p1_wr_count (),
.c3_p1_wr_underrun (),
.c3_p1_wr_error (),
.c3_p1_rd_clk (),
.c3_p1_rd_en ('b0),
.c3_p1_rd_data (),
.c3_p1_rd_full (),
.c3_p1_rd_empty (),
.c3_p1_rd_count (),
.c3_p1_rd_overflow (),
.c3_p1_rd_error (),
// port2
.c3_p2_cmd_clk (),
.c3_p2_cmd_en ('b0),
.c3_p2_cmd_instr (),
.c3_p2_cmd_bl (),
.c3_p2_cmd_byte_addr (),
.c3_p2_cmd_empty (),
.c3_p2_cmd_full (),
.c3_p2_wr_clk (),
.c3_p2_wr_en ('b0),
.c3_p2_wr_mask (),
.c3_p2_wr_data (),
.c3_p2_wr_full (),
.c3_p2_wr_empty (),
.c3_p2_wr_count (),
.c3_p2_wr_underrun (),
.c3_p2_wr_error (),
.c3_p2_rd_clk (),
.c3_p2_rd_en ('b0),
.c3_p2_rd_data (),
.c3_p2_rd_full (),
.c3_p2_rd_empty (),
.c3_p2_rd_count (),
.c3_p2_rd_overflow (),
.c3_p2_rd_error (),
// port3
.c3_p3_cmd_clk (),
.c3_p3_cmd_en ('b0),
.c3_p3_cmd_instr (),
.c3_p3_cmd_bl (),
.c3_p3_cmd_byte_addr (),
.c3_p3_cmd_empty (),
.c3_p3_cmd_full (),
.c3_p3_wr_clk (),
.c3_p3_wr_en ('b0),
.c3_p3_wr_mask (),
.c3_p3_wr_data (),
.c3_p3_wr_full (),
.c3_p3_wr_empty (),
.c3_p3_wr_count (),
.c3_p3_wr_underrun (),
.c3_p3_wr_error (),
.c3_p3_rd_clk (),
.c3_p3_rd_en ('b0),
.c3_p3_rd_data (),
.c3_p3_rd_full (),
.c3_p3_rd_empty (),
.c3_p3_rd_count (),
.c3_p3_rd_overflow (),
.c3_p3_rd_error (), // ddr2 chip signals
.mcb3_dram_dq (mcb3_dram_dq),
.mcb3_dram_a (mcb3_dram_a),
.mcb3_dram_ba (mcb3_dram_ba),
.mcb3_dram_ras_n (mcb3_dram_ras_n),
.mcb3_dram_cas_n (mcb3_dram_cas_n),
.mcb3_dram_we_n (mcb3_dram_we_n),
.mcb3_dram_odt (mcb3_dram_odt),
.mcb3_dram_cke (mcb3_dram_cke),
.mcb3_dram_dm (mcb3_dram_dm),
.mcb3_dram_udqs (mcb3_dram_udqs),
.mcb3_dram_udqs_n (mcb3_dram_udqs_n),
.mcb3_dram_udm (mcb3_dram_udm),
.mcb3_dram_dqs (mcb3_dram_dqs),
.mcb3_dram_dqs_n (mcb3_dram_dqs_n),
.mcb3_dram_ck (mcb3_dram_ck),
.mcb3_dram_ck_n (mcb3_dram_ck_n),
.mcb3_rzq (mcb3_rzq),
.mcb3_zio (mcb3_zio),
.c3_clk0 (),
.c3_rst0 (),
.c3_calib_done (c3_calib_done)
); endmodule

Wishbone总线从接口转Xilinx MIG (Spartan 6)的更多相关文章

  1. openrisc 之 Wishbone总线学习笔记——接口信号定义

    这部分内容就是copy下来的,网上到处都有.先看看接口啥样子,在详细说明 接口定义copy http://blog.csdn.net/ce123/article/details/6929897.百度文 ...

  2. openrisc 之 Wishbone总线学习笔记——总线互联

    一,总线命名规范 1,wishbone总线接口信号都是高电平有限 2,wishbone接口信号都是以 _i ,或者是 _o 结束.i表示输入, o表示输出. ()表示该信号为总线信号,总线位宽可以大于 ...

  3. OR1200处理器中Wishbone总线接口模块WB_BIU介绍

    下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块.15.1节给出了WB_BIU模块的对外连接关系,并指出 ...

  4. KC705E 增强版 基于FMC接口的Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 接口卡

    KC705E 增强版 基于FMC接口的Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 接口卡 一.板卡概述 本板卡基于Xilinx公司的FPGAXC7K325T-2FF ...

  5. 330-支持PXIE带FMC接口的Xilinx FPGA XC7K325T PCIeX8 接口卡平台

    支持PXIE带FMC接口的Xilinx FPGA XC7K325T PCIeX8 接口卡平台 一.板卡概述     本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_ ...

  6. 270-VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡

    VC709E 增强版 基于FMC接口的Xilinx Vertex-7 FPGA V7 XC7VX690T PCIeX8 接口卡 一.板卡概述       本板卡基于Xilinx公司的FPGA XC7V ...

  7. openrisc 之 Wishbone总线学习笔记——总线特性

    特性: 一,互联方式: 支持点到点.共享总线.十字交叉(Crossbar)和基于交换结构(Switch fabric)的互联. 二,数据操作方式:单次读/写操作.块读/写操作,读改写(RMW,Read ...

  8. modelsim仿真xilinx mig ip core相关问题

    1.运用自动化脚本文件 do sim.do  其中不支持 .f文件 , 需要直接vlog 2.对于mig模型采用下面句型(根据example中do sim.do文件) vlog -sv +define ...

  9. PCI总线目标接口状态机设计

    module state_machine (devsel_l, trdy_l, stop_l, pci_ad_oe,      dts_oe, par_oe, bk_oe, pci_ad_en, hi ...

随机推荐

  1. 9. Spark Streaming技术内幕 : Receiver在Driver的精妙实现全生命周期彻底研究和思考

        原创文章,转载请注明:转载自 听风居士博客(http://www.cnblogs.com/zhouyf/)       Spark streaming 程序需要不断接收新数据,然后进行业务逻辑 ...

  2. For input string: "..."

    之前在项目中通过EL表达式从cart 中取出itemPirce这个值时始终报:For input string: "${cart.itemPrice / 100}" 错误. 事故原 ...

  3. thinkjphp 模板中获取url中的action

    <if condition="ACTION_NAME eq 'add'">新增<else/>编辑</if>

  4. 如何求先序排列和后序排列——hihocoder1049+洛谷1030+HDU1710+POJ2255+UVA548【二叉树递归搜索】

    [已知先序.中序求后序排列]--字符串类型 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在这一周遇到的问题便是:给出一棵二叉树的前序和 ...

  5. 洛谷P1880 [NOI1995] 石子合并 [DP,前缀和]

    题目传送门 题目描述 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆 ...

  6. 面向对象编程课程(OOP)第一单元总结

    漫长旅程中还算不错的开头 在本学期开始之前,我按照助教们所给的寒假作业指导书自学了Java语言的相关知识,了解了Java语言的基本语法,输出一句“Hello World!”,掌握了基本的一些输入输出方 ...

  7. Linux基础系列-Day8

    Shell编程基础 Shell介绍 Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器).它类似于windows下的的cmd.exe.它接收用户命令,然后调用相应的应用程序 ...

  8. SSH服务审计工具ssh-audit

    SSH服务审计工具ssh-audit   SSH服务是常见的远程访问服务.通过对SSH服务进行审计,可以尝试发现对应的漏洞.Kali Linux新增一款SSH服务审计工具ssh-audit.该工具支持 ...

  9. Xamarin.Forms教程下载安装JDK配置环境变量

    Xamarin.Forms教程下载安装JDK配置环境变量 Xamarin.Form环境配置下载安装JDK JDK是编程Java程序必须的软件.也许有人会问我们用的C#为什么还有Java呢?这是因为我们 ...

  10. [2018湖南省队集训] 6.24 T1 marshland

    题面在这里! 一开始感觉像一个类似二分图的最小割,于是成功跑偏2333333 很容易发现一个关键性质,'L'的两个角落在的偶数格 的行(或者列)的奇偶性一定不同.... 于是我们再把偶数格按照行(或者 ...