Skip to content

Commit 7e5e18a

Browse files
committed
Veriloggen dataflow is upadted: Fmax is improved. and signed rule is correctly updated.
1 parent eb23f9b commit 7e5e18a

29 files changed

+10849
-6341
lines changed

examples/dataflow_fft4/test_dataflow_fft4.py

Lines changed: 2024 additions & 1046 deletions
Large diffs are not rendered by default.

examples/dataflow_fftN/test_dataflow_fftN.py

Lines changed: 7057 additions & 3771 deletions
Large diffs are not rendered by default.

examples/dataflow_madd_acc/test_dataflow_madd_acc.py

Lines changed: 85 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
expected_verilog = """
66
module test;
7-
87
reg CLK;
98
reg RST;
109
reg [32-1:0] xdata;
@@ -781,51 +780,33 @@
781780
wire [32-1:0] _tmp_data_0;
782781
wire _tmp_valid_0;
783782
wire _tmp_ready_0;
784-
wire [32-1:0] _tmp_ldata_0;
785-
wire [32-1:0] _tmp_rdata_0;
786-
assign _tmp_ldata_0 = xdata;
787-
assign _tmp_rdata_0 = ydata;
788-
wire [32-1:0] _tmp_abs_ldata_0;
789-
wire [32-1:0] _tmp_abs_rdata_0;
790-
assign _tmp_abs_ldata_0 = _tmp_ldata_0;
791-
assign _tmp_abs_rdata_0 = _tmp_rdata_0;
792-
wire _tmp_osign_0;
793-
wire [64-1:0] _tmp_abs_odata_0;
794783
wire [64-1:0] _tmp_odata_0;
795-
assign _tmp_odata_0 = _tmp_abs_odata_0;
796-
assign _tmp_data_0 = _tmp_odata_0;
784+
reg [64-1:0] _tmp_data_reg_0;
785+
assign _tmp_data_0 = _tmp_data_reg_0;
786+
wire _tmp_ovalid_0;
787+
reg _tmp_valid_reg_0;
788+
assign _tmp_valid_0 = _tmp_valid_reg_0;
797789
wire _tmp_enable_0;
798790
wire _tmp_update_0;
799791
assign _tmp_enable_0 = (_tmp_ready_0 || !_tmp_valid_0) && (xready && yready) && (xvalid && yvalid);
800792
assign _tmp_update_0 = _tmp_ready_0 || !_tmp_valid_0;
801793
802-
multiplier
803-
#(
804-
.datawidth(32),
805-
.depth(6)
806-
)
794+
multiplier_0
807795
mul0
808796
(
809797
.CLK(CLK),
810798
.RST(RST),
811799
.update(_tmp_update_0),
812800
.enable(_tmp_enable_0),
813-
.valid(_tmp_valid_0),
814-
.a(_tmp_abs_ldata_0),
815-
.b(_tmp_abs_rdata_0),
816-
.c(_tmp_abs_odata_0)
801+
.valid(_tmp_ovalid_0),
802+
.a(xdata),
803+
.b(ydata),
804+
.c(_tmp_odata_0)
817805
);
818806
819-
reg _tmp_sign0_0;
820-
reg _tmp_sign1_0;
821-
reg _tmp_sign2_0;
822-
reg _tmp_sign3_0;
823-
reg _tmp_sign4_0;
824-
reg _tmp_sign5_0;
825-
assign _tmp_osign_0 = _tmp_sign5_0;
826807
assign xready = (_tmp_ready_0 || !_tmp_valid_0) && (xvalid && yvalid);
827808
assign yready = (_tmp_ready_0 || !_tmp_valid_0) && (xvalid && yvalid);
828-
assign _tmp_ready_0 = (_tmp_ready_7 || !_tmp_valid_7) && _tmp_valid_0;
809+
assign _tmp_ready_0 = (_tmp_ready_8 || !_tmp_valid_8) && _tmp_valid_0;
829810
reg [32-1:0] _tmp_data_1;
830811
reg _tmp_valid_1;
831812
wire _tmp_ready_1;
@@ -850,22 +831,22 @@
850831
reg [32-1:0] _tmp_data_6;
851832
reg _tmp_valid_6;
852833
wire _tmp_ready_6;
853-
assign _tmp_ready_6 = 1;
834+
assign _tmp_ready_6 = (_tmp_ready_7 || !_tmp_valid_7) && _tmp_valid_6;
854835
reg [32-1:0] _tmp_data_7;
855836
reg _tmp_valid_7;
856837
wire _tmp_ready_7;
857-
assign zdata = _tmp_data_7;
858-
assign zvalid = _tmp_valid_7;
859-
assign _tmp_ready_7 = zready;
838+
assign _tmp_ready_7 = 1;
839+
reg [32-1:0] _tmp_data_8;
840+
reg _tmp_valid_8;
841+
wire _tmp_ready_8;
842+
assign zdata = _tmp_data_8;
843+
assign zvalid = _tmp_valid_8;
844+
assign _tmp_ready_8 = zready;
860845
861846
always @(posedge CLK) begin
862847
if(RST) begin
863-
_tmp_sign0_0 <= 0;
864-
_tmp_sign1_0 <= 0;
865-
_tmp_sign2_0 <= 0;
866-
_tmp_sign3_0 <= 0;
867-
_tmp_sign4_0 <= 0;
868-
_tmp_sign5_0 <= 0;
848+
_tmp_data_reg_0 <= 0;
849+
_tmp_valid_reg_0 <= 0;
869850
_tmp_data_1 <= 0;
870851
_tmp_valid_1 <= 0;
871852
_tmp_data_2 <= 0;
@@ -880,24 +861,14 @@
880861
_tmp_valid_6 <= 0;
881862
_tmp_data_7 <= 0;
882863
_tmp_valid_7 <= 0;
864+
_tmp_data_8 <= 1'd0;
865+
_tmp_valid_8 <= 0;
883866
end else begin
884867
if(_tmp_ready_0 || !_tmp_valid_0) begin
885-
_tmp_sign0_0 <= (_tmp_ldata_0[31] == 0) && (_tmp_rdata_0[31] == 0) || (_tmp_ldata_0[31] == 1) && (_tmp_rdata_0[31] == 1);
886-
end
887-
if(_tmp_ready_0 || !_tmp_valid_0) begin
888-
_tmp_sign1_0 <= _tmp_sign0_0;
889-
end
890-
if(_tmp_ready_0 || !_tmp_valid_0) begin
891-
_tmp_sign2_0 <= _tmp_sign1_0;
868+
_tmp_data_reg_0 <= _tmp_odata_0;
892869
end
893870
if(_tmp_ready_0 || !_tmp_valid_0) begin
894-
_tmp_sign3_0 <= _tmp_sign2_0;
895-
end
896-
if(_tmp_ready_0 || !_tmp_valid_0) begin
897-
_tmp_sign4_0 <= _tmp_sign3_0;
898-
end
899-
if(_tmp_ready_0 || !_tmp_valid_0) begin
900-
_tmp_sign5_0 <= _tmp_sign4_0;
871+
_tmp_valid_reg_0 <= _tmp_ovalid_0;
901872
end
902873
if((_tmp_ready_1 || !_tmp_valid_1) && resetready && resetvalid) begin
903874
_tmp_data_1 <= resetdata;
@@ -953,17 +924,26 @@
953924
if((_tmp_ready_6 || !_tmp_valid_6) && _tmp_ready_5) begin
954925
_tmp_valid_6 <= _tmp_valid_5;
955926
end
956-
if(_tmp_valid_6 && _tmp_ready_6) begin
927+
if((_tmp_ready_7 || !_tmp_valid_7) && _tmp_ready_6 && _tmp_valid_6) begin
957928
_tmp_data_7 <= _tmp_data_6;
958929
end
959-
if((_tmp_ready_7 || !_tmp_valid_7) && _tmp_ready_0 && _tmp_valid_0) begin
960-
_tmp_data_7 <= _tmp_data_7 + _tmp_data_0;
961-
end
962930
if(_tmp_valid_7 && _tmp_ready_7) begin
963931
_tmp_valid_7 <= 0;
964932
end
965-
if((_tmp_ready_7 || !_tmp_valid_7) && _tmp_ready_0) begin
966-
_tmp_valid_7 <= _tmp_valid_0;
933+
if((_tmp_ready_7 || !_tmp_valid_7) && _tmp_ready_6) begin
934+
_tmp_valid_7 <= _tmp_valid_6;
935+
end
936+
if(_tmp_valid_7 && _tmp_ready_7) begin
937+
_tmp_data_8 <= _tmp_data_7;
938+
end
939+
if((_tmp_ready_8 || !_tmp_valid_8) && _tmp_ready_0 && _tmp_valid_0) begin
940+
_tmp_data_8 <= _tmp_data_8 + _tmp_data_0;
941+
end
942+
if(_tmp_valid_8 && _tmp_ready_8) begin
943+
_tmp_valid_8 <= 0;
944+
end
945+
if((_tmp_ready_8 || !_tmp_valid_8) && _tmp_ready_0) begin
946+
_tmp_valid_8 <= _tmp_valid_0;
967947
end
968948
end
969949
end
@@ -973,45 +953,48 @@
973953
974954
975955
976-
module multiplier #
977-
(
978-
parameter datawidth = 32,
979-
parameter depth = 6
980-
)
956+
module multiplier_0
981957
(
982958
input CLK,
983959
input RST,
984960
input update,
985961
input enable,
986962
output valid,
987-
input [datawidth-1:0] a,
988-
input [datawidth-1:0] b,
989-
output [datawidth*2-1:0] c
963+
input [32-1:0] a,
964+
input [32-1:0] b,
965+
output [64-1:0] c
990966
);
991967
992-
reg [depth-1:0] valid_reg;
993-
assign valid = valid_reg[depth - 1];
994-
integer i;
968+
reg valid_reg0;
969+
reg valid_reg1;
970+
reg valid_reg2;
971+
reg valid_reg3;
972+
reg valid_reg4;
973+
reg valid_reg5;
974+
assign valid = valid_reg5;
995975
996976
always @(posedge CLK) begin
997977
if(RST) begin
998-
valid_reg <= 0;
978+
valid_reg0 <= 0;
979+
valid_reg1 <= 0;
980+
valid_reg2 <= 0;
981+
valid_reg3 <= 0;
982+
valid_reg4 <= 0;
983+
valid_reg5 <= 0;
999984
end else begin
1000985
if(update) begin
1001-
valid_reg[0] <= enable;
1002-
for(i=1; i<depth; i=i+1) begin
1003-
valid_reg[i] <= valid_reg[i - 1];
1004-
end
986+
valid_reg0 <= enable;
987+
valid_reg1 <= valid_reg0;
988+
valid_reg2 <= valid_reg1;
989+
valid_reg3 <= valid_reg2;
990+
valid_reg4 <= valid_reg3;
991+
valid_reg5 <= valid_reg4;
1005992
end
1006993
end
1007994
end
1008995
1009996
1010-
multiplier_core
1011-
#(
1012-
.datawidth(datawidth),
1013-
.depth(depth)
1014-
)
997+
multiplier_core_0
1015998
mult
1016999
(
10171000
.CLK(CLK),
@@ -1026,31 +1009,35 @@
10261009
10271010
10281011
1029-
module multiplier_core #
1030-
(
1031-
parameter datawidth = 32,
1032-
parameter depth = 6
1033-
)
1012+
module multiplier_core_0
10341013
(
10351014
input CLK,
10361015
input update,
1037-
input [datawidth-1:0] a,
1038-
input [datawidth-1:0] b,
1039-
output [datawidth*2-1:0] c
1016+
input [32-1:0] a,
1017+
input [32-1:0] b,
1018+
output [64-1:0] c
10401019
);
10411020
1042-
wire [datawidth*2-1:0] rslt;
1043-
reg [datawidth*2-1:0] mem [0:depth-1];
1044-
assign rslt = a * b;
1045-
assign c = mem[depth - 1];
1046-
integer i;
1021+
reg [32-1:0] _a;
1022+
reg [32-1:0] _b;
1023+
reg signed [64-1:0] _tmpval0;
1024+
reg signed [64-1:0] _tmpval1;
1025+
reg signed [64-1:0] _tmpval2;
1026+
reg signed [64-1:0] _tmpval3;
1027+
reg signed [64-1:0] _tmpval4;
1028+
wire signed [64-1:0] rslt;
1029+
assign rslt = $signed({ 1'd0, _a }) * $signed({ 1'd0, _b });
1030+
assign c = _tmpval4;
10471031
10481032
always @(posedge CLK) begin
10491033
if(update) begin
1050-
mem[0] <= rslt;
1051-
for(i=1; i<depth; i=i+1) begin
1052-
mem[i] <= mem[i - 1];
1053-
end
1034+
_a <= a;
1035+
_b <= b;
1036+
_tmpval0 <= rslt;
1037+
_tmpval1 <= _tmpval0;
1038+
_tmpval2 <= _tmpval1;
1039+
_tmpval3 <= _tmpval2;
1040+
_tmpval4 <= _tmpval3;
10541041
end
10551042
end
10561043

examples/dataflow_matmul/dataflow_matmul.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ def mkMatmul(n=16, datawidth=32):
6161
('xd', xdin), ('xv', ivalid), ('yd', ydin), ('yv', ivalid),
6262
('zd', odata), ('zv', ovalid), ('vreset_data', 0), ('vreset', vreset) ])
6363

64-
read_count = m.TmpReg(32, initval=0)
64+
read_count = m.TmpReg(int(addrwidth/2)+1, initval=0)
6565
sum_value = m.TmpReg(datawidth, initval=0)
66-
sum_count = m.TmpReg(32, initval=0)
66+
sum_count = m.TmpReg(int(addrwidth/2)+1, initval=0)
6767

6868
# main FSM
6969
fsm = FSM(m, 'fsm', clk, rst)

0 commit comments

Comments
 (0)