Skip to content
Snippets Groups Projects
Commit 5639a6ae authored by David Mapstone's avatar David Mapstone
Browse files

Successfull Simulation of AHB to VR to AHB

parent e7b454a3
No related branches found
No related tags found
No related merge requests found
import csv, os, tabulate import csv, os, tabulate
from enum import Enum
soclabs_header = """;#----------------------------------------------------------------------------- soclabs_header = """;#-----------------------------------------------------------------------------
;# SoC Labs Basic Hashing Accelerator Wrapper Input Stimulus File ;# SoC Labs Basic Hashing Accelerator Wrapper Input Stimulus File
...@@ -11,6 +12,28 @@ soclabs_header = """;#---------------------------------------------------------- ...@@ -11,6 +12,28 @@ soclabs_header = """;#----------------------------------------------------------
;# Copyright 2023, SoC Labs (www.soclabs.org) ;# Copyright 2023, SoC Labs (www.soclabs.org)
;#-----------------------------------------------------------------------------""" ;#-----------------------------------------------------------------------------"""
class TransactionType(Enum):
""" Enumerated Types for Transaction Types for ASCII Debug """
READ = 1
WRITE = 2
def __str__(self):
match self:
case TransactionType.READ:
return "R"
case TransactionType.WRITE:
return "W"
class TransactionSize(Enum):
""" Enumerated Types for Transaction Types for ASCII Debug """
WORD = 1
HALFWORD = 2
def __str__(self):
match self:
case TransactionSize.WORD:
return "word"
case TransactionSize.HALFWORD:
return "halfword"
class InputBlockStruct: class InputBlockStruct:
def __init__(self): def __init__(self):
self.word_list = [] self.word_list = []
...@@ -26,7 +49,7 @@ class InputPacketStruct: ...@@ -26,7 +49,7 @@ class InputPacketStruct:
self.block_list.append(block) self.block_list.append(block)
class WordStruct: class WordStruct:
def __init__(self, data = 0x0, addr = 0x0, packet_num = 0, block_num = 0, trans = "W", size ="word" ): def __init__(self, data, addr, trans, packet_num = 0, block_num = 0, size = TransactionSize.WORD):
self.data = data self.data = data
self.addr = addr self.addr = addr
self.trans = trans self.trans = trans
...@@ -106,11 +129,17 @@ def stimulus_generation(in_file, start_address, size): ...@@ -106,11 +129,17 @@ def stimulus_generation(in_file, start_address, size):
# print(f"Packet: {int(packet_num)} | Start Address: {hex(start_write_addr)}") # print(f"Packet: {int(packet_num)} | Start Address: {hex(start_write_addr)}")
write_addr = start_write_addr write_addr = start_write_addr
for block_num, block in enumerate(packet.block_list): for block_num, block in enumerate(packet.block_list):
read_address = write_addr + 0x0000_0800
for word in block.word_list: for word in block.word_list:
word_data = WordStruct(word, write_addr, packet_num, block_num) word_data = WordStruct(word, write_addr, TransactionType.WRITE, packet_num, block_num)
output_word_list.append(word_data) output_word_list.append(word_data)
# Increment Address # Increment Address
write_addr += 0x4 write_addr += 0x4
for word in block.word_list:
word_data = WordStruct(word, read_address, TransactionType.READ, packet_num, block_num)
output_word_list.append(word_data)
# Increment Address
read_address += 0x4
# Generate FRI File with Write Transactions # Generate FRI File with Write Transactions
fri_file = os.environ["WRAP_ACC_DIR"] + "/simulate/stimulus/" + "ahb_input_hash_stim.fri" fri_file = os.environ["WRAP_ACC_DIR"] + "/simulate/stimulus/" + "ahb_input_hash_stim.fri"
......
...@@ -57,6 +57,10 @@ always_ff @(posedge hclk or negedge hresetn) begin ...@@ -57,6 +57,10 @@ always_ff @(posedge hclk or negedge hresetn) begin
data_out <= {PACKETWIDTH{1'b0}}; data_out <= {PACKETWIDTH{1'b0}};
last_wr_addr <= {ADDRWIDTH{1'b0}}; last_wr_addr <= {ADDRWIDTH{1'b0}};
end else begin end else begin
// Handshake Output
if (data_out_ready && data_out_valid) begin
data_out_valid <= 1'b0;
end
if (write_en) begin if (write_en) begin
// If not (awaiting handshake AND address generates new data payload) // If not (awaiting handshake AND address generates new data payload)
if (!((data_out_valid && !data_out_ready) && (addr[5:2] == 4'hF))) begin if (!((data_out_valid && !data_out_ready) && (addr[5:2] == 4'hF))) begin
......
...@@ -50,7 +50,7 @@ assign deconst_buf_flag_reduced = &(deconst_buf_flag | (cur_deconst_buf_flag)); ...@@ -50,7 +50,7 @@ assign deconst_buf_flag_reduced = &(deconst_buf_flag | (cur_deconst_buf_flag));
// Select which word in buffer to read // Select which word in buffer to read
logic [$clog2(PACKETWIDTH/32)-1:0] buf_word_sel; logic [$clog2(PACKETWIDTH/32)-1:0] buf_word_sel;
assign buf_word_sel = addr[4:2]; assign buf_word_sel = addr[($clog2(PACKETWIDTH/32)-1)+2:2];
logic deconst_buf_valid; logic deconst_buf_valid;
// Dump data on one of two conditions // Dump data on one of two conditions
......
...@@ -52,7 +52,7 @@ parameter ADDRWIDTH = 12; ...@@ -52,7 +52,7 @@ parameter ADDRWIDTH = 12;
// parameter InputFileName = "ahb_input_hash_stim.m2d"; // parameter InputFileName = "ahb_input_hash_stim.m2d";
parameter InputFileName = ("../stimulus/ahb_input_hash_stim.m2d"); parameter InputFileName = ("../stimulus/ahb_input_hash_stim.m2d");
parameter MessageTag = "FileReader:"; parameter MessageTag = "FileReader:";
parameter StimArraySize = 5000; parameter StimArraySize = 10000;
//******************************************************************************** //********************************************************************************
......
This diff is collapsed.
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment