(筆記) 如何將memory轉成vector? (SOC) (Verilog)

Abstract
本文使用Verilog 2005的新特性實現memory轉vector。

Introduction
網友Adamite今天問我該如何將memory轉成vector,我們兩個在MSN研究了一番,發現Verilog 2001的generate與Verilog 2005的input memory可以達成,特別做下筆記。

重點是:『這些花俏的寫法,Quartus II 7.2/8.1都可以合成』。不過必須將Quartus II設定成支援Verilog 2005。

memory_to_vector.v / Verilog

1  /*  
2  (C) OOMusou 2008 http://oomusou.cnblogs.com
3 
4  Filename    : memory_to_vector.v
5  Compiler    : Quartus II 8.1
6  Description : array to vector
7  Release     : 12/25/2008 1.0
8  */
9 
10  module memory_to_vector (
11    input [VECTORSIZE - 1 : 0 ] mem [ARRAYSIZE - 1 : 0 ],
12    output [ARRAYSIZE * VECTORSIZE - 1 : 0 ] vec
13  );
14 
15  parameter VECTORSIZE =   4 ;
16  parameter ARRAYSIZE =   3 ;
17 
18  genvar i,j;
19  generate
20    for (i =   0 ; i < ARRAYSIZE - 1 ; i = i +   1 ) begin : array
21      for (j =   0 ; j < VECTORSIZE - 1 ; j = j +   1 ) begin : vector
22        assign vec[i * VECTORSIZE + j] = mem[i][j];
23      end
24    end
25  endgenerate
26 
27  endmodule


18行

genvar i,j;
generate
 
for (i =   0 ; i < ARRAYSIZE - 1 ; i = i +   1 ) begin : array
   
for (j =   0 ; j < VECTORSIZE - 1 ; j = j +   1 ) begin : vector
     
assign vec[i * VECTORSIZE + j] = mem[i][j];
   
end
 
end
endgenerate


genvar與generate是Verilog 2001才有的,非常強大,可以配合for做一些規律性的assign,這在Verilog 95無法達成。

11行

input [VECTORSIZE - 1 : 0 ] mem [ARRAYSIZE - 1 : 0 ],


則是Verilog 2005才支援的,允許input與output為memory。

完整程式下載
memory_to_vector.7z

Conclusion
這些花俏的寫法,寫起來爽度當然很高,但就怕只能寫TestBench而不能合成,不過所幸以上的寫法在Quartus II 7.2/8.1都可以合成,可以安心使用。

See Also
Adamite(原创)verilog2001中generate的精妙用法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值