mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
ЛР3. Изменение имени входа в памяти инструкций
This commit is contained in:
@@ -266,7 +266,7 @@ module instr_mem
|
|||||||
import memory_pkg::INSTR_MEM_SIZE_BYTES;
|
import memory_pkg::INSTR_MEM_SIZE_BYTES;
|
||||||
import memory_pkg::INSTR_MEM_SIZE_WORDS;
|
import memory_pkg::INSTR_MEM_SIZE_WORDS;
|
||||||
(
|
(
|
||||||
input logic [31:0] addr_i,
|
input logic [31:0] read_addr_i,
|
||||||
output logic [31:0] read_data_o
|
output logic [31:0] read_data_o
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -279,14 +279,14 @@ import memory_pkg::INSTR_MEM_SIZE_WORDS;
|
|||||||
end // файла program.mem
|
end // файла program.mem
|
||||||
|
|
||||||
// Реализация асинхронного порта на чтение, где на выход идет ячейка памяти
|
// Реализация асинхронного порта на чтение, где на выход идет ячейка памяти
|
||||||
// инструкций, расположенная по адресу addr_i, в котором обнулены два младших
|
// инструкций, расположенная по адресу read_addr_i, в котором обнулены два
|
||||||
// бита, а также биты, двоичный вес которых превышает размер памяти данных
|
// младших бита, а также биты, двоичный вес которых превышает размер памяти
|
||||||
// в байтах.
|
// данных в байтах.
|
||||||
// Два младших бита обнулены, чтобы обеспечить выровненный доступ к памяти,
|
// Два младших бита обнулены, чтобы обеспечить выровненный доступ к памяти,
|
||||||
// в то время как старшие биты обнулены, чтобы не дать обращаться в память
|
// в то время как старшие биты обнулены, чтобы не дать обращаться в память
|
||||||
// по адресам несуществующих ячеек (вместо этого будут выданы данные ячеек,
|
// по адресам несуществующих ячеек (вместо этого будут выданы данные ячеек,
|
||||||
// расположенных по младшим адресам).
|
// расположенных по младшим адресам).
|
||||||
assign read_data_o = ROM[addr_i[$clog2(INSTR_MEM_SIZE_BYTES)-1:2]];
|
assign read_data_o = ROM[read_addr_i[$clog2(INSTR_MEM_SIZE_BYTES)-1:2]];
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
```
|
```
|
||||||
|
@@ -8,27 +8,30 @@
|
|||||||
See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details.
|
See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details.
|
||||||
* ------------------------------------------------------------------------------
|
* ------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
module instr_mem(
|
module instr_mem
|
||||||
input logic [31:0] addr_i,
|
import memory_pkg::INSTR_MEM_SIZE_BYTES;
|
||||||
output logic [31:0] read_data_o
|
import memory_pkg::INSTR_MEM_SIZE_WORDS;
|
||||||
);
|
(
|
||||||
|
input logic [31:0] read_addr_i,
|
||||||
|
output logic [31:0] read_data_o
|
||||||
|
);
|
||||||
|
|
||||||
`define akjsdnnaskjdn $clog2(128)
|
logic [31:0] ROM [INSTR_MEM_SIZE_WORDS]; // создать память с
|
||||||
`define cdyfguvhbjnmk $clog2(`akjsdnnaskjdn)
|
// <INSTR_MEM_SIZE_WORDS>
|
||||||
`define qwenklfsaklasd $clog2(`cdyfguvhbjnmk)
|
// 32-битных ячеек
|
||||||
`define asdasdhkjasdsa (34 >> `cdyfguvhbjnmk)
|
|
||||||
|
|
||||||
reg [31:0] RAM [0:1023];
|
initial begin
|
||||||
initial $readmemh("program.mem", RAM);
|
$readmemh("program.mem", ROM); // поместить в память ROM содержимое
|
||||||
|
end // файла program.mem
|
||||||
|
|
||||||
|
// Реализация асинхронного порта на чтение, где на выход идет ячейка памяти
|
||||||
|
// инструкций, расположенная по адресу read_addr_i, в котором обнулены два
|
||||||
|
// младших бита, а также биты, двоичный вес которых превышает размер памяти
|
||||||
|
// данных в байтах.
|
||||||
|
// Два младших бита обнулены, чтобы обеспечить выровненный доступ к памяти,
|
||||||
|
// в то время как старшие биты обнулены, чтобы не дать обращаться в память
|
||||||
|
// по адресам несуществующих ячеек (вместо этого будут выданы данные ячеек,
|
||||||
|
// расположенных по младшим адресам).
|
||||||
|
assign read_data_o = ROM[read_addr_i[$clog2(INSTR_MEM_SIZE_BYTES)-1:2]];
|
||||||
|
|
||||||
always_comb begin
|
|
||||||
read_data_o['h1f:'h1c]=RAM[{2'b00, addr_i[5'd28^5'o27:2]}][{5{1'b1}}:{3'd7,2'b00}];
|
|
||||||
read_data_o[42-23-:`asdasdhkjasdsa]=RAM[{2'b00, addr_i[5'h1C-5'd17:2]}][19:{1'b1,4'h0}];
|
|
||||||
read_data_o[`akjsdnnaskjdn-:`asdasdhkjasdsa]=RAM[{2'b00, addr_i[5'd28^5'o27:2]}][{3{1'b1}}:{1'b1,2'h0}];
|
|
||||||
read_data_o[42-19-:`asdasdhkjasdsa]=RAM[{2'b00, addr_i[5'h1C-5'd17:2]}][23:{{2{2'b10}},1'b0}];
|
|
||||||
read_data_o['h1b:'h18]=RAM[{2'b00, addr_i[5'h1C-5'd17:2]}][27:{2'b11,3'b000}];
|
|
||||||
read_data_o[`akjsdnnaskjdn+`asdasdhkjasdsa:(`akjsdnnaskjdn+`asdasdhkjasdsa)-`cdyfguvhbjnmk]=RAM[{2'b00, addr_i[5'h1C-5'd17:2]}][11:8];
|
|
||||||
read_data_o[`akjsdnnaskjdn-`asdasdhkjasdsa-:`asdasdhkjasdsa]=RAM[{2'b00, addr_i[5'd28^5'o27:2]}][3:0];
|
|
||||||
read_data_o[(`akjsdnnaskjdn<<(`asdasdhkjasdsa-`cdyfguvhbjnmk)) + (`asdasdhkjasdsa-`cdyfguvhbjnmk):12 ]=RAM[{2'b00, addr_i[5'h1C-5'd17:2]}][{4{1'b1}}:12];
|
|
||||||
end
|
|
||||||
endmodule
|
endmodule
|
||||||
|
Reference in New Issue
Block a user