forked from libre-chip/cpu
Compare commits
2 commits
1ead550d13
...
672a29e76d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
672a29e76d | ||
|
|
35ea85d074 |
2 changed files with 38 additions and 19 deletions
|
|
@ -29,14 +29,18 @@ pub fn main_memory(config: &CpuConfig) {
|
|||
let read_data: UInt<8> = m.output();
|
||||
#[hdl]
|
||||
let en: Bool = m.input();
|
||||
|
||||
#[hdl]
|
||||
// add write support
|
||||
#[hdl]
|
||||
let write_en: Bool = m.input();
|
||||
#[hdl]
|
||||
let write_data: UInt<8> = m.input();
|
||||
|
||||
#[hdl]
|
||||
let cd: ClockDomain = m.input();
|
||||
// for each instance do
|
||||
// connect(instance.cd, cd);
|
||||
|
||||
|
||||
#[hdl]
|
||||
|
||||
#[hdl]
|
||||
//let mut mem = memory_with_init([0x12u8, 0x34, 0x56, 0x78]);
|
||||
let mut my_memory = memory_with_init([0x12_hdl_u8, 0x34_hdl_u8, 0x56_hdl_u8, 0x78_hdl_u8]);
|
||||
|
||||
|
|
@ -46,18 +50,21 @@ pub fn main_memory(config: &CpuConfig) {
|
|||
connect_any(read_port.addr, addr); //FIXME
|
||||
connect_any(read_port.en, addr.cmp_lt(4u64));
|
||||
connect(read_port.clk, cd.clk);
|
||||
connect(read_data,read_port.data);
|
||||
|
||||
|
||||
|
||||
|
||||
connect(read_data, read_port.data);
|
||||
|
||||
let write_port = my_memory.new_write_port();
|
||||
connect_any(write_port.addr, addr);
|
||||
connect_any(write_port.en, addr.cmp_lt(4u64) & write_en);
|
||||
connect_any(write_port.data, write_data);
|
||||
connect(write_port.clk, cd.clk);
|
||||
//connect_any(write_port.mask, 0xFFu8); //try that one
|
||||
connect_any(write_port.mask, true);
|
||||
}
|
||||
|
||||
// see https://git.libre-chip.org/libre-chip/fayalite/src/branch/master/crates/fayalite/tests/sim.rs
|
||||
// how to write testbenches
|
||||
// start with a very simple memory model ->
|
||||
// TODO create a branch for the memory
|
||||
// start with a very simple memory model ->
|
||||
// TODO create a branch for the memory
|
||||
|
||||
// 1 connect up the read port, add write later
|
||||
// ask how I make the memory pipelined later ... not today
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
use cpu::{
|
||||
config::{CpuConfig, UnitConfig},
|
||||
instruction::{AddSubMOp, LogicalMOp, MOp, MOpDestReg, MOpRegNum, OutputIntegerMode},
|
||||
main_memory::main_memory,
|
||||
reg_alloc::{FetchedDecodedMOp, reg_alloc},
|
||||
register::{FlagsMode, PRegFlagsPowerISA},
|
||||
unit::{GlobalState, UnitKind},
|
||||
main_memory::main_memory,
|
||||
};
|
||||
use fayalite::{
|
||||
assert_export_firrtl,
|
||||
|
|
@ -41,6 +41,8 @@ fn test_main_memory() {
|
|||
sim.write(sim.io().en, true);
|
||||
sim.write(sim.io().cd.rst, false);
|
||||
sim.write(sim.io().cd.clk, false);
|
||||
sim.write(sim.io().write_en, false);
|
||||
sim.write(sim.io().write_data, 0xFFu8);
|
||||
|
||||
// TODO convert to for loop
|
||||
// you need to write an initial value to all inputs before you can start running the simulation
|
||||
|
|
@ -49,16 +51,26 @@ fn test_main_memory() {
|
|||
sim.advance_time(SimDuration::from_micros(1)); //panic here at simulation
|
||||
|
||||
dbg!(sim.read(sim.io().read_data)); // dbg! macro just displays the value you pass to it
|
||||
|
||||
|
||||
|
||||
for n in 0u64..4u64 {
|
||||
sim.write(sim.io().addr, n);
|
||||
// now wait 1us because why not
|
||||
sim.advance_time(SimDuration::from_micros(1));
|
||||
// now wait 1us because why not
|
||||
sim.advance_time(SimDuration::from_micros(1));
|
||||
}
|
||||
|
||||
|
||||
|
||||
sim.write(sim.io().write_en, true);
|
||||
sim.write(sim.io().addr, 0u64);
|
||||
sim.write(sim.io().write_data, 0x11u8);
|
||||
sim.advance_time(SimDuration::from_micros(1));
|
||||
sim.write(sim.io().addr, 1u64);
|
||||
sim.write(sim.io().write_data, 0x22u8);
|
||||
sim.advance_time(SimDuration::from_micros(1));
|
||||
sim.write(sim.io().addr, 2u64);
|
||||
sim.write(sim.io().write_data, 0x33u8);
|
||||
sim.advance_time(SimDuration::from_micros(1));
|
||||
sim.write(sim.io().addr, 3u64);
|
||||
sim.write(sim.io().write_data, 0x44u8);
|
||||
sim.advance_time(SimDuration::from_micros(1));
|
||||
|
||||
sim.flush_traces().unwrap(); // make sure everything is written to the output file
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue