zoukankan      html  css  js  c++  java
  • FPGA----只读存储器(ROM)

       
        ROM是一种重要的时序逻辑存储电路,它的逻辑功能是在地址信号的选择下,从指定存储单元中读取相应的数据。R0M只能进行数据的读取,而不能修改或写人新的数据,本节将以16×8的ROM为例,介绍ROM的设计方法。
     

    Verilog HDL:

     1 module ROM_ex1 (addr, data, en);
     2 
     3     input [3:0] addr;//地址选择信号
     4     input en;        //使能端
     5     output reg [7:0] data;//数据输出端
     6     reg[7:0] data1 [15:0];
     7     
     8     always @(*)
     9         begin
    10             data1[0]  <= 8'b1010_1001;
    11             data1[1]  <= 8'b1111_1101;
    12             data1[2]  <= 8'b1110_1001;
    13             data1[3]  <= 8'b1101_1100;
    14             data1[4]  <= 8'b1011_1001;
    15             data1[5]  <= 8'b1100_0010;
    16             data1[6]  <= 8'b1100_0101;
    17             data1[7]  <= 8'b0000_0100;
    18             data1[8]  <= 8'b1110_1100;
    19             data1[9]  <= 8'b1000_1010;
    20             data1[10] <= 8'b1100_1111;
    21             data1[12] <= 8'b1100_0001;
    22             data1[13] <= 8'b1001_1111;
    23             data1[14] <= 8'b1010_0101;
    24             data1[15] <= 8'b0101_1100;
    25             if (en)
    26                 begin
    27                     data[7:0] <= data1[addr];
    28                 end 
    29             else 
    30                 begin 
    31                     data[7:0] <= 8'bzzzz_zzzz;
    32                 end 
    33         end 
    34         
    35 endmodule

    Testbench

     1 `timescale 1 ps/ 1 ps
     2 module ROM_ex1_vlg_tst();
     3     reg [3:0] addr;
     4     reg en;                                             
     5     wire [7:0]  data;
     6 
     7     ROM_ex1 i1 (
     8         .addr(addr),
     9         .data(data),
    10         .en(en)
    11     );
    12     initial                                                
    13         begin                                                  
    14             addr = 4'd0;
    15             en   = 1'b0;
    16             #10 addr = 4'd5;
    17             en   = 1'b1;
    18             #10 addr = 4'd9;
    19             #10 addr = 4'd12;
    20             #10 addr = 4'd15;
    21             $display("Running testbench");                       
    22         end                                                    
    23 
    24 endmodule

    仿真波形:

       

        观察波形可知,当 en 为“1”时,data 输出数据,否则 data 为高阻态,addr 为地址选择信号,当其输入不同的值时,data 输出相应的存储的数据。

     
  • 相关阅读:
    从小白到全栈的前端学习路径
    Vue初学者可能不知道的坑
    vue的基础使用
    15-浮动
    02-css的选择器
    深入理解JavaScript的闭包
    深入理解JavaScript的闭包,前戏— 作用域和词法作用域
    JavaScript简介
    02-HTML5新的input属性
    springboot+spring session+redis+nginx实现session共享和负载均衡
  • 原文地址:https://www.cnblogs.com/yllinux/p/7639171.html
Copyright © 2011-2022 走看看