//主要是// 和**********部分是关键
1 `timescale 1ns/1ns
module tb(); reg main_clk;
reg [:] addr;
reg FPGA_CS0;//FPGA cs
reg RD;
reg WR;
wire arm_clk;
wire led; wire [:]data; //*******
reg [:] treg_data; //关键部分
integer i; // assign data = treg_data; //***** STM32_FPGA u1(
.main_clk(main_clk),
.arm_clk(arm_clk),
.led(led),
.addr(addr),
.data(data),
.FPGA_CS0(FPGA_CS0),//FPGAƬ
.RD(RD),
.WR(WR) ); initial begin
main_clk = ;
addr = 'd0;
FPGA_CS0 = ;
RD = ;
WR = ;
i = ;
treg_data = ;
#
for(i=;i<;i=i+)begin //往FPGA寄存器写入8个随机数据
WR = ;
addr = i;
treg_data = $random;
#
WR = ;
#;
end
treg_data ='bz; //写完后,treg_data 与 data 断开
#
for(i=;i<;i=i+)begin //从FPGA 寄存器读出8个数据
FPGA_CS0 = ;
RD = ;
addr = i;
#;
end
FPGA_CS0 = ;
RD = ; end always # main_clk = ~main_clk; endmodule

1 /* 实际调试没有发现什么问题! */

 module STM32_FPGA(
input main_clk,
output arm_clk, output led, input [:] addr,
inout[:] data, input FPGA_CS0,//FPGA片选
input RD,
input WR ); wire clk; pll_50M pll_50M_inst (
.inclk0 ( main_clk ),//25M
.c0 ( clk ), //50M
.c1 ( arm_clk ) //8M
); reg [:] cnt = ;
always @(posedge clk)
cnt <= cnt + 'b1; assign led = cnt[]; //AWE的上升沿,将数据写入FPGA寄存器 reg [:] ARM_FPGA_REG0;
reg [:] ARM_FPGA_REG1;
reg [:] ARM_FPGA_REG2;
reg [:] ARM_FPGA_REG3;
reg [:] ARM_FPGA_REG4;
reg [:] ARM_FPGA_REG5;
reg [:] ARM_FPGA_REG6;
reg [:] ARM_FPGA_REG7; wire rd_en = ~FPGA_CS0 && ~RD; reg [:] data_reg;
//always @(posedge clk) //DSP读操作,The sampling point of DSP reading is the risging edge of AWE!
always @(*)
begin
if(rd_en)
begin
case(addr[:])
'd0 : data_reg <= ARM_FPGA_REG0;
'd1 : data_reg <= ARM_FPGA_REG1;
'd2 : data_reg <= ARM_FPGA_REG2;
'd3 : data_reg <= ARM_FPGA_REG3;
'd4 : data_reg <= ARM_FPGA_REG4;
'd5 : data_reg <= ARM_FPGA_REG5;
'd6 : data_reg <= ARM_FPGA_REG6;
'd7 : data_reg <= ARM_FPGA_REG7;
default: data_reg<= 'hzzzz;
endcase
end
else data_reg<= 'hzzzz;
end /* AWE下降沿DSP的数据写入FPGA,即sampling point */ reg WR_tmp1;
reg WR_tmp2;
always @(posedge clk)
begin
WR_tmp1 <= WR;
WR_tmp2 <= WR_tmp1;
end wire WR_RISING = WR_tmp2 && ~WR_tmp1;//与clk同步 always @(*)
begin
if(WR_RISING)
begin
case(addr[:])
'd0 : ARM_FPGA_REG0 <= data;
'd1 : ARM_FPGA_REG1 <= data;
'd2 : ARM_FPGA_REG2 <= data;
'd3 : ARM_FPGA_REG3 <= data;
'd4 : ARM_FPGA_REG4 <= data;
'd5 : ARM_FPGA_REG5 <= data;
'd6 : ARM_FPGA_REG6 <= data;
'd7 : ARM_FPGA_REG7 <= data;
default: ;
endcase
end
else begin
ARM_FPGA_REG0 <= ARM_FPGA_REG0;
ARM_FPGA_REG1 <= ARM_FPGA_REG1;
ARM_FPGA_REG2 <= ARM_FPGA_REG2;
ARM_FPGA_REG3 <= ARM_FPGA_REG3;
ARM_FPGA_REG4 <= ARM_FPGA_REG4;
ARM_FPGA_REG5 <= ARM_FPGA_REG5;
ARM_FPGA_REG6 <= ARM_FPGA_REG6;
ARM_FPGA_REG7 <= ARM_FPGA_REG7;
end
end
// assign data = rd_en ? data_reg : 16'hzzzz;
 assign data = data_reg;  //可以用三目运算,但根据54行到68行逻辑判断,没有必要

 endmodule

参考原文http://blog.chinaaet.com/xzy610030/p/37525

inout口在modelsim仿真的方法的更多相关文章

  1. 在verilog中关于inout口的设计方法

    在学习IIC的时候我们知道这么设计inout inout   scl : reg    scl_reg ,  scl_en ; scl  = scl_en ?   scl_reg : 1'dz ; 当 ...

  2. 用Modelsim仿真QuartusII综合后网表时库的添加方法(转)

    这两天做综合后仿真,发现FPGA器件库又不会加了,无奈上网找方法.说起来不好意思,很早就接触Modelsim这个仿真软件了,可是没有好好琢磨.把这两天找的方法贴出来,再加上自己的理解,以后忘了可以上博 ...

  3. 【黑金原创教程】【Modelsim】【第一章】Modelsim仿真的扫盲文

    声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/al ...

  4. ModelSim仿真入门

    ModelSim仿真入门之一:软件介绍 编写这个教程之前,为了让不同水平阶段的人都能阅读,我尽量做到了零基础入门这个目标,所有的操作步骤都经过缜密的思考,做到了详细再详细的程度. 如果您是FPGA开发 ...

  5. modelsim仿真基本流程

    好久没再用过modelsim,都忘的一干二净了.刚换了份工作,又要重新拾起来,不过现在感觉modelsim的仿真其实是比较快的,很有用处.再者这么长时间老是学了忘,忘了再学,觉得真浪费时间,平时确实应 ...

  6. cordic算法的verilog实现及modelsim仿真

    1. 算法介绍 CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,是J.D.Volder1于1959年首次提出,主要用于三角函数.双曲 ...

  7. 45.modelsim仿真include文件

    modelsim仿真include文件会出现找不到文件的情况,这是因为include文件路径有两种,一种是相对路径,另一种是绝对路径. 相对路径: 如果 ‘include "primitiv ...

  8. 14.quartus联合modelsim仿真

    在quartus调用modelsim仿真过程中,出现了一个错误,如下所示: Check the NativeLink log file I:/Quartus11.0/Myproject/testi_n ...

  9. modelsim 仿真时出现无限迭代(iteration reach limitation)的原因及其解决办法

    modelsim 仿真时出现无限迭代(iteration reach limitation) 出现这种故障的原因:  一般都是代码里出现的组合逻辑无限循环或者组合逻辑A产生signal_A,signa ...

随机推荐

  1. ionic3开发环境的搭建 记录!

    总的来说都很顺利,毕竟已经打包成功在手机上面跑起来了,给的两个教程很给力,基本没有误差,照着步骤敲没问题,打包命令有所更新目前已修正,吃一堑长一智下面说下其中遇到的问题:1.第一点是ionic ser ...

  2. Spring Boot 线程池

    参考 SpringBoot 线程池 程序猿DD-Spring Boot使用@Async实现异步调用:自定义线程池 如何优雅的使用和理解线程池 Spring Boot线程池的使用心得 博客园-Sprin ...

  3. TeamView工具在提示“似乎用于商用环境”的处理方式

    第一种:通过修改这个文件/也有可能删除(没有尝试过)

  4. c语言程序操作

  5. 小程序之 fixed定位下scroll-view左右滚动失效

    红框为悬浮 左右可以滑动 效果如下⬇️ 悬浮把最外层position:fixed;top:0;这个时候上面的导航就可以悬浮 但是会出现左右滑动不了的情况 这是因为我没给设置宽度 这个时候我们把包着sc ...

  6. DAY20 常用模块(三)

    一.加密模块 1.加密方式: 1.有解密的加密方式 2.无解密的加密方式,碰撞检查 1.不同数据加密后的结果一定不一致 2.相同数据的加密结果一定是一致 2.hashlib模块 1.基本使用 ciph ...

  7. vue动态绑定src加字符串拼接

    关键点 1.img中的src的字符串动态拼接 2.style中的background属性赋值 一.img中的src的字符串动态拼接 1.问题是这样子的,瞧瞧 基本网络链接 : http://openw ...

  8. PYTHON -- 基础3

    1.数据类型 1.int 类型 用于计算 1.1 bit_length() 转换为2进制的最小位置 有效的 i = 5 print(i.bit_length()) i 二进制 i.bit_length ...

  9. Python turtle学习笔记

    1介绍 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而 ...

  10. 课堂小练习(complex类)

    定义一个复数类Complex,使得下面的代码能够工作: Complex c1(3,5);     //用复数3+5i初始化c1: Compex c2=4.5;      //用实数4.5初始化c2 c ...