IC設計基礎001 暫存器讀寫,讀清是如何實現的

2021-09-23 17:02:17 字數 2042 閱讀 6898

1、soc讀寫是如何實現的?

2、讀清是如何實現的?

**中data_err_dy實現了讀清功能,data_err:1表示有效,存在錯誤資料,在mem匯流排讀取之前,data_err_dy一直保持為1,mem匯流排讀取後,將data_err_dy清零。

module soc_mem_wr 

( input soc_clk ,

input soc_rst_n ,

input mem_rd ,

input mem_wr ,

input [9:0] mem_rw_addr ,

input [31:0] mem_wr_dat ,

output reg [31:0] mem_rd_dat ,

output reg mem_rd_datvld ,

input data_err ,

output reg send_data_enable ,

output reg data_down_req

); reg data_err_dy ;

always @ (posedge soc_clk or negedge soc_rst_n) begin

if(!soc_rst_n)begin

send_data_enable <= 1'b0;

data_down_req <= 1'b0 ;

end

else begin

if(mem_wr)

case(mem_rw_addr)

10'h0 : send_data_enable <= mem_wr_dat[0] ;

10'h1 : data_down_req <= mem_wr_dat[0] ;

default : ;

endcase

endalways @ (posedge soc_clk or negedge soc_rst_n) begin

if(!soc_rst_n)

mem_rd_datvld <= 1'b0 ;

else

mem_rd_datvld <= mem_rd ;

always @ (posedge soc_clk or negedge soc_rst_n) begin

if(!soc_rst_n)

mem_rd_dat <= 32'b0;

else

if(mem_rd)

case(mem_rw_addr)

10'h0 : mem_wr_dat <= ;

10'h1 : mem_wr_dat <= ;

10'h2 : mem_wr_dat <= ;

default : mem_wr_dat <= 32'hffff_ffff ;

endcase

end//讀清是如何實現的

always @ (posedge soc_clk or negedge soc_rst_n) begin

if(!soc_rst_n)

data_err_dy <= 1'b0;

else

data_err_dy <= (mem_rd&(mem_rw_addr==10'h2))? 1'b0 :

data_err_dy ? data_err_dy : data_err ;

endmodule

通用暫存器 記憶體讀寫

暫存器的結構 eax 的一半為 ax ax 的一半為 al ax就是eax的一部分 al就是ax的一部分 低位 ah就是ax的一部分 高位 8位暫存器只能放2個十六進製制的數 乙個位元組 彙編指令 mov,add,sub,and,or,xor,not 計算機記憶體的每乙個位元組會有乙個編號 即記憶體...

Linux下讀寫暫存器

arm裸機下讀寫暫存器很容易,各個暫存器和記憶體的位址是單一位址空間,他們是用相同的指令進行讀寫操作的.而在linux下就要複雜很多,因為linux支援多個體系架構的cpu。比如arm和x86就不一樣,具體的差別我暫時也說不上來,這個涉及到cpu體系的設計。目前我只關心 linux為了支援多個硬體體...

Linux下讀寫暫存器

arm裸機下讀寫暫存器很容易,各個暫存器和記憶體的位址是單一位址空間,他們是用相同的指令進行讀寫操作的.而在linux下就要複雜很多,因為linux支援多個體系架構的cpu。比如arm和x86就不一樣,具體的差別我暫時也說不上來,這個涉及到cpu體系的設計。目前我只關心 linux為了支援多個硬體體...