您的位置:首页 > 其它

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

2008-12-25 01:13 573 查看
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的精妙用法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: