quartus ii綜合ram及相關知識備忘


當用verilog寫一個memory時,如下:

reg[15:0] datamem[7:0];

直接綜合,並不會用fpga中的memory資源

需要加上(* ramstyle = "M-RAM" *)才會讓quartus將其綜合使用ram資源

(*ramstyle = "M-RAM"*)reg[15:0] datamem[7:0];

還可以將M-RAM換成其他字樣,使系統使用M4K塊之類的,詳見

http://quartushelp.altera.com/13.1/mergedProjects/hdl/vlog/vlog_file_dir_ram.htm

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  這里的內存模型指的是內存的行為模型。Verilog中提供了兩維數組來幫助我們建立內存的行為模型。具體來說,就是可以將內存宣稱為一個reg類型的數組,這個數組中的任何一個單元都可以通過一個下標去訪問。這樣的數組的定義方式如下:

reg [wordsize : 0] array_name [0 : arraysize];

      例如:

reg [7:0] my_memory [0:255];

其中 [7:0] 是內存的寬度,而[0:255]則是內存的深度(也就是有多少存儲單元),其中寬度為8位,深度為256。地址0對應着數組中的0存儲單元。

         如果要存儲一個值到某個單元中去,可以這樣做:

         my_memory [address] = data_in;

      而如果要從某個單元讀出值,可以這么做:

         data_out = my_memory [address];

         但要是只需要讀一位或者多個位,就要麻煩一點,因為Verilog不允許讀/寫一個位。這時,就需要使用一個變量轉換一下:

         例如:

         data_out = my_memory[address];

data_out_it_0 = data_out[0];

      這里首先從一個單元里面讀出數據,然后再取出讀出的數據的某一位的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM