mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
* Feat(labs/03/board):Переписывание топа
* Ref(labs/03/board/top):Уд-ие лишнего условия в we
* Repo(labs/03/board/top):Изм-кредита
* Repo(pic/03/struct):Доб-ие начального drawio
* Feat(pic/03/board/struct):Нарисовка картинки
* Feat(pic/03/board/struct):Доб-ие цветов в схему
* Ref(pic/03/board/struct):Различные улучшения
* Ref(pic/03/board/struct):Выделение wa
* Ref(pic/03/board/struct):Различные улучшения
* Ref(pic/03/board/struct):Подвижка nexys_rf_riscv
* Ref(pic/03/board/struct):Изм-ие цвета шины
* Ref(pic/03/board/struct):Утолщение шины
* Ref(pic/03/board/struct):Изм-ие цветов, выд кнопок
* Ref(pic/03/board/struct):Изм-ие цвета ra2
* Feat(pic/03/board/control):Начальный комит
* Ref(pic/03/board/control):Обрезка пикчи платы
* Ref(03/board):Выпиливание старой пикчи контроля
* Ref(03/board/md):Некоторые испр-ия
* Ref(03/board/md):Доб-ие описание остальной периф
* Ref(03/board/md):Выделеине в заголовки перефирии
* Fix(03/board/nexys_rf):Испр-ие мапинга кнопок
* Ref(pic/03/board/write_addr):Перерисовка пикчи
* Ref(pic/03/board/write_data):Перерисовка пикчи
* Ref(pic/03/board/read):Перерисовка пикчи
* Ref(03/board/md):Переписывание
* Feat(03/board/md):Доб-ие рисунка структуры
* Ref(03/board/md):Улучшение
* Ref(03/board/nexys_rf_riscv):Уд-ие reg wd
Тк не нужно и усложняет схему
* Ref(03/board/md):Испр-ие содержимого note
* Fix(03/board):Apply suggestions from code review
Co-authored-by: Andrei Solodovnikov <VoultBoy@yandex.ru>
* Ref(03/board/md):Замена нижние->младшие
* Ref(03/board):Ren картинок
* Ref(pic/03/board/wa_5):Crop image
* Feat(03/board):Доб-ие записи в регистр 6
* Ref(pic/03/board/struct):Вырав-ие портов rf
* Ref(03/board/md):Изм-ие подписи рис. 2
* Ref(03/board/md/control):Доб-ие обводки
* Revert "Ref(03/board/md/control):Доб-ие обводки"
This reverts commit d55735e859
.
* Ref(pic/03/board/struct):Улуч-ие разрядности рег
* Ref(pic/03/board):Выделение фона у текстов
* Fix(pic/03/board/control):Испр-ие фона теста
---------
Co-authored-by: Andrei Solodovnikov <VoultBoy@yandex.ru>
145 lines
4.1 KiB
Systemverilog
145 lines
4.1 KiB
Systemverilog
/* -----------------------------------------------------------------------------
|
|
* Project Name : Architectures of Processor Systems (APS) lab work
|
|
* Organization : National Research University of Electronic Technology (MIET)
|
|
* Department : Institute of Microdevices and Control Systems
|
|
* Author(s) : Alexander Kharlamov
|
|
* Email(s) : sasha_xarlamov@org.miet.ru
|
|
|
|
See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details.
|
|
* ------------------------------------------------------------------------------
|
|
*/
|
|
module nexys_rf_riscv(
|
|
input logic clk_i,
|
|
input logic arstn_i,
|
|
input logic [15:0] sw_i,
|
|
input logic btnd_i,
|
|
input logic btnr_i,
|
|
output logic [15:0] led_o,
|
|
output logic ca_o,
|
|
output logic cb_o,
|
|
output logic cc_o,
|
|
output logic cd_o,
|
|
output logic ce_o,
|
|
output logic cf_o,
|
|
output logic cg_o,
|
|
output logic dp_o,
|
|
output logic [ 7:0] an_o
|
|
);
|
|
|
|
logic [ 4:0] ra1;
|
|
logic [ 4:0] ra2;
|
|
logic [ 4:0] wa;
|
|
logic [31:0] wd;
|
|
logic we;
|
|
logic [7:0][3:0] rd1;
|
|
logic [7:0][3:0] rd2;
|
|
|
|
rf_riscv rf_riscv (
|
|
.clk_i (clk_i),
|
|
.read_addr1_i (ra1 ),
|
|
.read_addr2_i (ra2 ),
|
|
.write_addr_i (wa ),
|
|
.write_data_i (wd ),
|
|
.write_enable_i (we ),
|
|
.read_data1_o (rd1 ),
|
|
.read_data2_o (rd2 )
|
|
);
|
|
|
|
function automatic logic [6:0] hex2semseg(input logic [3:0] hex);
|
|
unique case (hex)
|
|
4'h0: return 7'b0000001;
|
|
4'h1: return 7'b1001111;
|
|
4'h2: return 7'b0010010;
|
|
4'h3: return 7'b0000110;
|
|
4'h4: return 7'b1001100;
|
|
4'h5: return 7'b0100100;
|
|
4'h6: return 7'b0100000;
|
|
4'h7: return 7'b0001111;
|
|
4'h8: return 7'b0000000;
|
|
4'h9: return 7'b0000100;
|
|
4'hA: return 7'b0001000;
|
|
4'hB: return 7'b1100000;
|
|
4'hC: return 7'b0110001;
|
|
4'hD: return 7'b1000010;
|
|
4'hE: return 7'b0110000;
|
|
4'hF: return 7'b0111000;
|
|
endcase
|
|
endfunction
|
|
|
|
localparam int COUNTER_WIDTH = 10;
|
|
logic [COUNTER_WIDTH-1:0] counter_next;
|
|
logic [COUNTER_WIDTH-1:0] counter_ff;
|
|
assign counter_next = counter_ff + COUNTER_WIDTH'('b1);
|
|
always_ff @(posedge clk_i or negedge arstn_i) begin
|
|
if (!arstn_i) counter_ff <= '0;
|
|
else counter_ff <= counter_next;
|
|
end
|
|
|
|
logic [7:0] an_ff;
|
|
logic [7:0] an_next;
|
|
logic an_en;
|
|
assign an_next = {an_ff[$left(an_ff)-1:0], an_ff[$left(an_ff)]};
|
|
assign an_en = ~|counter_ff;
|
|
always_ff @(posedge clk_i or negedge arstn_i) begin
|
|
if (!arstn_i) an_ff <= ~8'b1;
|
|
else if (an_en) an_ff <= an_next;
|
|
end
|
|
|
|
localparam bit [6:0] BLANK = 7'b1111111;
|
|
|
|
logic [6:0] semseg;
|
|
always_comb begin
|
|
semseg = BLANK;
|
|
|
|
unique case (1'b0)
|
|
an_ff[0]: semseg = hex2semseg(rd2[0]);
|
|
an_ff[1]: semseg = hex2semseg(rd2[1]);
|
|
an_ff[2]: semseg = hex2semseg(rd2[2]);
|
|
an_ff[3]: semseg = hex2semseg(rd2[3]);
|
|
an_ff[4]: semseg = hex2semseg(rd1[0]);
|
|
an_ff[5]: semseg = hex2semseg(rd1[1]);
|
|
an_ff[6]: semseg = hex2semseg(rd1[2]);
|
|
an_ff[7]: semseg = hex2semseg(rd1[3]);
|
|
endcase
|
|
end
|
|
|
|
logic [2:0][4:0] addresses_next;
|
|
assign addresses_next = sw_i[14:0];
|
|
logic [4:0] wa_ff;
|
|
logic [4:0] ra1_ff;
|
|
logic [4:0] ra2_ff;
|
|
logic [4:0] wa_next;
|
|
assign wa_next = addresses_next[0];
|
|
logic [4:0] ra1_next;
|
|
assign ra1_next = addresses_next[2];
|
|
logic [4:0] ra2_next;
|
|
assign ra2_next = addresses_next[1];
|
|
logic addresses_en;
|
|
assign addresses_en = btnd_i;
|
|
always_ff @(posedge clk_i or negedge arstn_i) begin
|
|
if (!arstn_i) begin
|
|
wa_ff <= '0;
|
|
ra1_ff <= '0;
|
|
ra2_ff <= '0;
|
|
end else if (addresses_en) begin
|
|
wa_ff <= wa_next;
|
|
ra1_ff <= ra1_next;
|
|
ra2_ff <= ra2_next;
|
|
end
|
|
end
|
|
assign wa = wa_ff;
|
|
assign ra1 = ra1_ff;
|
|
assign ra2 = ra2_ff;
|
|
|
|
assign wd = {16'b0, sw_i};
|
|
assign we = btnr_i;
|
|
|
|
assign {ca_o, cb_o, cc_o, cd_o, ce_o, cf_o, cg_o} = semseg;
|
|
assign dp_o = 1'b1;
|
|
|
|
assign led_o = {1'b0, ra1, ra2, wa};;
|
|
|
|
assign an_o = an_ff;
|
|
|
|
endmodule
|