Line 179... |
Line 179... |
-- Internal Data memory --
|
-- Internal Data memory --
|
MEM_INT_DMEM_USE => true, -- implement processor-internal data memory
|
MEM_INT_DMEM_USE => true, -- implement processor-internal data memory
|
MEM_INT_DMEM_SIZE => 8*1024, -- size of processor-internal data memory in bytes
|
MEM_INT_DMEM_SIZE => 8*1024, -- size of processor-internal data memory in bytes
|
-- External memory interface --
|
-- External memory interface --
|
MEM_EXT_USE => true, -- implement external memory bus interface?
|
MEM_EXT_USE => true, -- implement external memory bus interface?
|
MEM_EXT_REG_STAGES => 2, -- number of interface register stages (0,1,2)
|
|
-- Processor peripherals --
|
-- Processor peripherals --
|
IO_GPIO_USE => true, -- implement general purpose input/output port unit (GPIO)?
|
IO_GPIO_USE => true, -- implement general purpose input/output port unit (GPIO)?
|
IO_MTIME_USE => true, -- implement machine system timer (MTIME)?
|
IO_MTIME_USE => true, -- implement machine system timer (MTIME)?
|
IO_UART_USE => true, -- implement universal asynchronous receiver/transmitter (UART)?
|
IO_UART_USE => true, -- implement universal asynchronous receiver/transmitter (UART)?
|
IO_SPI_USE => true, -- implement serial peripheral interface (SPI)?
|
IO_SPI_USE => true, -- implement serial peripheral interface (SPI)?
|
Line 310... |
Line 309... |
wb_mem.rdata(0) <= wb_ram(to_integer(unsigned(wb_cpu.addr(index_size_f(wb_mem_size_c/4)+1 downto 2)))); -- word aligned
|
wb_mem.rdata(0) <= wb_ram(to_integer(unsigned(wb_cpu.addr(index_size_f(wb_mem_size_c/4)+1 downto 2)))); -- word aligned
|
-- virtual read and ack latency --
|
-- virtual read and ack latency --
|
if (wb_mem_latency_c > 1) then
|
if (wb_mem_latency_c > 1) then
|
for i in 1 to wb_mem_latency_c-1 loop
|
for i in 1 to wb_mem_latency_c-1 loop
|
wb_mem.rdata(i) <= wb_mem.rdata(i-1);
|
wb_mem.rdata(i) <= wb_mem.rdata(i-1);
|
wb_mem.rb_en(i) <= wb_mem.rb_en(i-1);
|
wb_mem.rb_en(i) <= wb_mem.rb_en(i-1) and wb_cpu.cyc;
|
wb_mem.ack(i) <= wb_mem.ack(i-1) and wb_cpu.cyc;
|
wb_mem.ack(i) <= wb_mem.ack(i-1) and wb_cpu.cyc;
|
end loop;
|
end loop;
|
end if;
|
end if;
|
end if;
|
end if;
|
end process wb_mem_ram_access;
|
end process wb_mem_ram_access;
|
Line 322... |
Line 321... |
-- wishbone memory access? --
|
-- wishbone memory access? --
|
wb_mem.acc_en <= '1' when (wb_cpu.addr >= wb_mem_base_addr_c) and (wb_cpu.addr < std_ulogic_vector(unsigned(wb_mem_base_addr_c) + wb_mem_size_c)) else '0';
|
wb_mem.acc_en <= '1' when (wb_cpu.addr >= wb_mem_base_addr_c) and (wb_cpu.addr < std_ulogic_vector(unsigned(wb_mem_base_addr_c) + wb_mem_size_c)) else '0';
|
|
|
-- output to cpu --
|
-- output to cpu --
|
wb_cpu.rdata <= wb_mem.rdata(wb_mem_latency_c-1) when (wb_mem.rb_en(wb_mem_latency_c-1) = '1') else (others=> '0'); -- data output gate
|
wb_cpu.rdata <= wb_mem.rdata(wb_mem_latency_c-1) when (wb_mem.rb_en(wb_mem_latency_c-1) = '1') else (others=> '0'); -- data output gate
|
wb_cpu.ack <= wb_mem.ack(wb_mem_latency_c-1) and wb_cpu.cyc; -- another AND for classic/standard wishbone transactions
|
wb_cpu.ack <= wb_mem.ack(wb_mem_latency_c-1);
|
wb_cpu.err <= '0';
|
wb_cpu.err <= '0';
|
|
|
|
|
end neorv32_tb_rtl;
|
end neorv32_tb_rtl;
|
|
|
No newline at end of file
|
No newline at end of file
|