zoukankan      html  css  js  c++  java
  • Xilinx ISE 14.1中模拟True Dual Port RAM例子

    <一>创建工程

           创建工程在此略过。

    <二>基本代码

    1、创建一个Verilog modual代码如下:

    module main(
             input clk,
         input rsta,
         input wea,
         input [3 : 0] addra,
         input [7 : 0] dina,
         output [7 : 0] douta,
         input rstb,
         input web,
         input [3 : 0] addrb,
         input [7 : 0] dinb,
         output [7 : 0] doutb
        );
    device1 mydevice(
            .clka(clk),
        .rsta(rsta),
        .wea(wea),
        .addra(addra),
        .dina(dina),
        .douta(douta),
        .clkb(clk),
        .rstb(rstb),
        .web(web),
        .addrb(addrb),
        .dinb(dinb),
        .doutb(doutb)
        );
        
    endmodule

    代码中元件例化了一个True Dual Port RAM。

    2、写测试代码

    module mainTest;
    
        // Inputs
        reg clk;
        reg rsta;
        reg wea;
        reg [3:0] addra;
        reg [7:0] dina;
        reg rstb;
        reg web;
        reg [3:0] addrb;
        reg [7:0] dinb;
    
        // Outputs
        wire [7:0] douta;
        wire [7:0] doutb;
    
        // Instantiate the Unit Under Test (UUT)
        main uut (
            .clk(clk), 
            .rsta(rsta), 
            .wea(wea), 
            .addra(addra), 
            .dina(dina), 
            .douta(douta), 
            .rstb(rstb), 
            .web(web), 
            .addrb(addrb), 
            .dinb(dinb), 
            .doutb(doutb)
        );
    
        initial begin
            // Initialize Inputs
            clk = 0;
            rsta = 0;
            wea = 1;
            addra = 1;//这里为什么是1在下面有解释
            dina = 0;
            rstb = 0;
            web = 0;
            addrb = 0;
            dinb = 0;
    
            // Wait 100 ns for global reset to finish
            
            // Add stimulus here
    
        end
       always #0.001 clk = ~clk;
        always @(negedge clk)
          begin 
             addra = addra + 1;
              addrb = addrb + 1;
              dina = dina + 2;
          end
    endmodule

    <三>执行结果

    在结果图中,前面的100ps数据并没有改变(原因有待进一步查明);

    因为web=0一直不变,所以port B是禁止写数据的,而addrb总是比addra小1,这样做的目的就是为了利用port B 的doutb来检测port A在上一次写入的数据是不是正确的写入,即doutb总是显示的port A 在clk上一次的上升沿写入的数据。

  • 相关阅读:
    android报表图形引擎(AChartEngine)demo解析与源码
    eclipse开发android程序常见问题解决办法
    android中监听layout布局
    android中LayoutInflater详解与使用
    WordPress标题函数wp_title()详解
    内网DMZ外网之间的访问规则
    ARTS打卡计划第一周-Share-系统字典模块的设计
    ARTS打卡计划第一周-Tips-ControllerAdvice的使用
    ARTS打卡计划第一周-Review
    ARTS打卡计划第一周-Algorithm
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/3412555.html
Copyright © 2011-2022 走看看