verilog 儲存器組織

2021-09-10 14:36:48 字數 2886 閱讀 7094

用verilog寫乙個組合邏輯的ram64x8的儲存器組織,實現簡單的讀寫功能

乙個ram64x8的儲存器由4x2=8個ram16x4的儲存晶元組成

核心**:

連線其他模組和外部介面的模組檔案virtual_lab_top.v:

//64x4儲存器實驗

`default_nettype none

module virtual_lab_top //訊號的輸入和輸出

( input wire clock,

input wire [4:0] button, //按鍵

input wire [35:0] switch, //開關

output wire [35:0] led, //指示燈

output wire [3:0] hex0, //數碼管

output wire [3:0] hex1,

output wire [3:0] hex2,

output wire [3:0] hex3

); //輸入埠賦值給內部訊號

wire [5:0] adrs = switch[5:0];

wire [7:0] data = switch[13:6];

wire write = button[0];

wire read = button[1];

wire re = button[2];

//內部訊號賦值給輸出埠(數碼管)觀察

assign hex0 = temp[3:0];

assign hex1 = temp[7:4];

//實驗邏輯

wire [7:0] temp;

reg _ce,_we,_oe;

always@(posedge write or posedge read or posedge re)

begin

if(write)

begin

_ce<=1'b0;

_we<=1'b0;

_oe<=1'b1;

endelse if(read)

begin

_ce<=1'b0;

_we<=1'b1;

_oe<=1'b0;

endelse

begin

_ce<=1'b1;

_we<=1'b1;

_oe<=1'b1;

endendram64x8 u1(.adrs(adrs),.data(data),._ce(_ce),._we(_we),._oe(_oe),.temp(temp));

endmodule

ram16x4儲存器模組檔案ram16x4.v:

module ram16x4(

input [3:0]adrs,

input [3:0]data,

input _ce,_we,_oe,

output reg [3:0] temp

); reg [3:0] mem[0:15];//16 x 4 ram

//assign data = (~_ce & _we & ~_ce)? temp:4'hz;

always@(*)

begin

if(_ce == 0) begin

if(_we == 0&&_oe == 1)

mem[adrs] <= data;

else if(_we == 1&&_oe == 0)

temp <= mem[adrs];

else

temp <= 4'hz;

endend

endmodule

ram16x8儲存器模組檔案ram16x8.v:

module ram16x8(

input [3:0] adrs,

input [7:0] data,

input _ce,_we,_oe,

output [7:0] temp

);ram16x4 u1(adrs,data[7:4],_ce,_we,_oe,temp[7:4]);

ram16x4 u2(adrs,data[3:0],_ce,_we,_oe,temp[3:0]);

endmodule

ram64x8儲存器模組檔案ram64x8.v:

module ram64x8(

input [5:0] adrs,

input [7:0] data,

input _ce,_we,_oe,

output [7:0] temp

);reg [3:0] _cee;

ram16x8 u1(adrs[3:0],data,_cee[0],_we,_oe,temp);

ram16x8 u2(adrs[3:0],data,_cee[1],_we,_oe,temp);

ram16x8 u3(adrs[3:0],data,_cee[2],_we,_oe,temp);

ram16x8 u4(adrs[3:0],data,_cee[3],_we,_oe,temp);

//2-to-4 decode

always@(*)

begin

if(_ce==0)

case(adrs[5:4])

0:_cee=4'b1110;

1:_cee=4'b1101;

2:_cee=4'b1011;

3:_cee=4'b0111;

default:_cee=4'hf;

endcase

else

_cee = 4'hf;

endendmodule

注意:本次設計讀寫功能分別採用一條資料線,並非採用雙向資料匯流排

STM32學習 儲存器組織

stm32f1有四種儲存單元,依次是sram flash fsmc和ahb到apb橋 掛載各種外設 程式儲存器 資料儲存器 暫存器和輸入輸出埠被組織在同乙個4gb的線性位址空間內。資料位元組以小端格式存放在儲存器中。乙個字裡的最低位址位元組被認為是該字的最低有效位元組,而最高位址位元組是最高有效位元...

8086儲存器的分段組織與管理

1 熟悉8086儲存器的分段管理方式。2 掌握儲存單元位址的兩種描述方式 實體地址和邏輯位址,以及從邏輯位址到實體地址的換算方法。記憶體是設定在主機內部的儲存器,能被cpu直接訪問,主要用來存放當前執行的程式和所需的數 據,以便隨時向cpu提供資訊。它與cpu的聯絡最密切,若把cpu比作生產成品的工...

80x86儲存器組織結構

概括 本文介紹80x86儲存器組成的基本原理,會隱藏一些硬體細節。一 基本組成 1.1 計算機系統由cpu,memory,i o組成,如下圖,時鐘驅動cpu處理 讀 寫 運算 memory裡的程式或者資料,以及控制i o。1.2 當然現的計算機系統不會如此簡單,因為memory有很多種,i o裝置的...