Add CRC generation for sd card
ci/woodpecker/push/test-workflow Pipeline was successful

Works great according to the testbench
This commit is contained in:
2025-06-06 18:13:14 -07:00
parent 35cb264b26
commit 71f08bdf15
5 changed files with 222 additions and 2 deletions
+49
View File
@@ -0,0 +1,49 @@
module crc_gen_tb;
parameter CRCBITS=7;
parameter COMMANDLEN=40;
parameter POLYNOMIAL='h89;
logic clk, reset, start, ready;
logic [COMMANDLEN-1:0] num;
logic [CRCBITS-1:0] crc;
logic [CRCBITS-1:0] test_cases [logic [COMMANDLEN-1:0]];
crc_gen #(CRCBITS,COMMANDLEN,POLYNOMIAL) dut (.*);
initial begin
clk = 0;
forever #10 clk = ~clk;
end
initial begin
test_cases = '{
'h1234567890: 'h10,
'hBEEFB05535: 'h05,
'h5544992211: 'h17,
'0: '0
};
reset = 1;
start = 0;
repeat (2) @(posedge clk);
reset = 0;
@(posedge clk);
foreach (test_cases[key]) begin
wait (ready);
num = key;
@(posedge clk);
start = 1;
@(posedge clk);
start = 0;
@(posedge clk);
wait(ready);
assert (crc === test_cases[key])
else $error("Invalid crc, found 0x%x but expected 0x%x",crc,test_cases[key]);
end
$finish;
end
endmodule
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<wave_config>
<wave_state>
</wave_state>
<db_ref_list>
<db_ref path="crc_gen_tb_behav.wdb" id="1">
<top_modules>
<top_module name="crc_gen_tb" />
<top_module name="glbl" />
</top_modules>
</db_ref>
</db_ref_list>
<zoom_setting>
<ZoomStartTime time="609.789 ns"></ZoomStartTime>
<ZoomEndTime time="1,276.290 ns"></ZoomEndTime>
<Cursor1Time time="209.703 ns"></Cursor1Time>
</zoom_setting>
<column_width_setting>
<NameColumnWidth column_width="533"></NameColumnWidth>
<ValueColumnWidth column_width="219"></ValueColumnWidth>
</column_width_setting>
<WVObjectSize size="10" />
<wvobject type="logic" fp_name="/crc_gen_tb/clk">
<obj_property name="ElementShortName">clk</obj_property>
<obj_property name="ObjectShortName">clk</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/crc_gen_tb/reset">
<obj_property name="ElementShortName">reset</obj_property>
<obj_property name="ObjectShortName">reset</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/crc_gen_tb/start">
<obj_property name="ElementShortName">start</obj_property>
<obj_property name="ObjectShortName">start</obj_property>
</wvobject>
<wvobject type="logic" fp_name="/crc_gen_tb/ready">
<obj_property name="ElementShortName">ready</obj_property>
<obj_property name="ObjectShortName">ready</obj_property>
</wvobject>
<wvobject type="array" fp_name="/crc_gen_tb/num">
<obj_property name="ElementShortName">num[39:0]</obj_property>
<obj_property name="ObjectShortName">num[39:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/crc_gen_tb/crc">
<obj_property name="ElementShortName">crc[6:0]</obj_property>
<obj_property name="ObjectShortName">crc[6:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/crc_gen_tb/CRCBITS">
<obj_property name="ElementShortName">CRCBITS[31:0]</obj_property>
<obj_property name="ObjectShortName">CRCBITS[31:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/crc_gen_tb/COMMANDLEN">
<obj_property name="ElementShortName">COMMANDLEN[31:0]</obj_property>
<obj_property name="ObjectShortName">COMMANDLEN[31:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/crc_gen_tb/POLYNOMIAL">
<obj_property name="ElementShortName">POLYNOMIAL[31:0]</obj_property>
<obj_property name="ObjectShortName">POLYNOMIAL[31:0]</obj_property>
</wvobject>
<wvobject type="array" fp_name="/crc_gen_tb/dut/counter">
<obj_property name="ElementShortName">counter[6:0]</obj_property>
<obj_property name="ObjectShortName">counter[6:0]</obj_property>
</wvobject>
</wave_config>