Verilog中初始化ram/rom中的数据

http://xmind.iteye.com/blog/696744

,readmem,readmemb,readmemh都可以实现:

readmemh例子:

Verilog代码   收藏代码
  1. `timescale  1ns/100ps  
  2. module readmem_tb;  
  3.     reg [7:0]       Mem[0:'h7ff];  
  4.       
  5.     initial  
  6.         begin  
  7.             $readmemh ("frame.mif",Mem);  
  8.         end  
  9.       
  10. endmodule  

 

用到的frame.mif文件: 从文件可以看出@后面跟的是地址,文件中可以有//这样的注释,空格分隔每个数。

Txt代码   收藏代码
  1. @000   
  2. //* ********** 1s frame data **************/  
  3. 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  
  4. 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  
  5. 20 21 22 23 00 00 00 00 00 00 00 00 00 00 00 00  
  6. 30 31 32 33 00 00 00 00 00 00 00 00 00 00 00 00  
  7. 40 41 42 43 00 00 00 00 00 00 00 00 00 00 00 00  
  8. 50 51 52 53 00 00 00 00 00 00 00 00 00 00 00 00  
  9. 60 61 62 63 00 00 00 00 00 00 00 00 00 00 00 00  
  10. 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F  
  11. 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F  
  12. 90 91 92 93 11 11 11 11 11 11 11 11 11 11 11 11  
  13. A0 A1 A2 A3 11 11 11 11 11 11 11 11 11 11 11 11  
  14. B0 B1 B2 B3 11 11 11 11 11 11 11 11 11 11 11 11  
  15. C0 C1 C2 C3 11 11 11 11 11 11 11 11 11 11 11 11  
  16. D0 D1 D2 D3 11 11 11 11 11 11 11 11 11 11 11 11  
  17. E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF  
  18. F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF  
  19.   
  20. @100   
  21. //* ********** 2d frame data **************/  
  22. 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  
  23. 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F  
  24. 20 21 22 23 22 22 22 22 22 22 22 22 22 22 22 22  
  25. 30 31 32 33 22 22 22 22 22 22 22 22 22 22 22 22  
  26. 40 41 42 43 22 22 22 22 22 22 22 22 22 22 22 22  
  27. 50 51 52 53 22 22 22 22 22 22 22 22 22 22 22 22  
  28. 60 61 62 63 22 22 22 22 22 22 22 22 22 22 22 22  
  29. 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F  
  30. 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F  
  31. 90 91 92 93 33 33 33 33 33 33 33 33 33 33 33 33  
  32. A0 A1 A2 A3 33 33 33 33 33 33 33 33 33 33 33 33  
  33. B0 B1 B2 B3 33 33 33 33 33 33 33 33 33 33 33 33  
  34. C0 C1 C2 C3 33 33 33 33 33 33 33 33 33 33 33 33  
  35. D0 D1 D2 D3 33 33 33 33 33 33 33 33 33 33 33 33  
  36. E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF  
  37. F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF  


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Verilog是一种硬件描述语言,可以用来描述数字电路的行为和结构。在VerilogROM(只读存储器)和RAM(随机存储器)是两种不同的存储器类型。它们有不同的访问方式、读写速度、存储容量和成本。 ROM是一种只读存储器,其存储的数据无法被修改。ROM数据一般是在设计过程预先指定的,因此ROM通常用于存储程序代码和常量数据。 在Verilog,可以使用“initial”语句来初始化ROM数据,例如: ``` module rom ( input [7:0] addr, output reg [7:0] data ); reg [7:0] mem [0:255]; initial begin mem[0] = 8'h12; mem[1] = 8'h34; mem[2] = 8'h56; // ... end always @(addr) data <= mem[addr]; endmodule ``` 在上面的代码,定义了一个8位地址和8位数据ROM。使用“initial”语句初始化ROM数据,然后使用“always”语句,使得当地址变化时,从ROM读取对应的数据RAM是一种可读可写存储器,其存储的数据可以被修改。RAM通常用于存储程序需要动态修改的数据。 在Verilog,可以使用“reg”类型声明一个寄存器,然后使用“always”语句来实现RAM。例如: ``` module ram ( input [7:0] addr, input [7:0] din, input wr_en, output reg [7:0] dout ); reg [7:0] mem [0:255]; always @(addr, wr_en) begin if (wr_en) mem[addr] <= din; dout <= mem[addr]; end endmodule ``` 在上面的代码,定义了一个8位地址、8位写入数据、写使能信号和8位读出数据RAM。使用“reg”类型声明一个寄存器,然后使用“always”语句,根据地址和写使能信号判断是写入数据还是读取数据,并将数据写入或读出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值