📄 demo_32_8.v
字号:
//////////////////////////////////////////////////////////////////////////////////////
// Name 32*8 bit systolic multiplier //
// Version 1.0 //
// Author Marko, Karl //
// Date Dec 23 //
// Character Demo version discribed as in fig 11 //
// Changes Original Version //
//////////////////////////////////////////////////////////////////////////////////////
module demo_32_8 (clk, Ai, Gi, Bi, ctrl, Pi, Ao, Go, Po);
input [ 7:0] Ai, Gi;
input [255:0] Bi;
input [14:0] Pi;
input clk, ctrl;
output [ 7:0] Ao, Go, Po;
reg [ 7:0] Ao, Go, Po;
wire [ 7:0] ma31, ma30, ma29, ma28, ma27, ma26, ma25, ma24; // wire for connecting singal A
wire [ 7:0] ma23, ma22, ma21, ma20, ma19, ma18, ma17, ma16;
wire [ 7:0] ma15, ma14, ma13, ma12, ma11, ma10, ma09, ma08;
wire [ 7:0] ma07, ma06, ma05, ma04, ma03, ma02, ma01, ma00;
wire [ 7:0] mg31, mg30, mg29, mg28, mg27, mg26, mg25, mg24; // wire for connecting singal G
wire [ 7:0] mg23, mg22, mg21, mg20, mg19, mg18, mg17, mg16;
wire [ 7:0] mg15, mg14, mg13, mg12, mg11, mg10, mg09, mg08;
wire [ 7:0] mg07, mg06, mg05, mg04, mg03, mg02, mg01, mg00;
wire [ 6:0] zp; // wire for Po[6:0]
wire [14:0] mp31, mp30, mp29, mp28, mp27, mp26, mp25, mp24; // wire for connecting singal P
wire [14:0] mp23, mp22, mp21, mp20, mp19, mp18, mp17, mp16;
wire [14:0] mp15, mp14, mp13, mp12, mp11, mp10, mp09, mp08;
wire [14:0] mp07, mp06, mp05, mp04, mp03, mp02, mp01, mp00;
wire mc31, mc30, mc29, mc28, mc27, mc26, mc25, mc24; // wire for connecting singal ctrl
wire mc23, mc22, mc21, mc20, mc19, mc18, mc17, mc16;
wire mc15, mc14, mc13, mc12, mc11, mc10, mc09, mc08;
wire mc07, mc06, mc05, mc04, mc03, mc02, mc01, mc00;
reg [ 7:0] xa31, xa30, xa29, xa28, xa27, xa26, xa25, xa24; // reg for connecting singal A
reg [ 7:0] xa23, xa22, xa21, xa20, xa19, xa18, xa17, xa16;
reg [ 7:0] xa15, xa14, xa13, xa12, xa11, xa10, xa09, xa08;
reg [ 7:0] xa07, xa06, xa05, xa04, xa03, xa02, xa01, xa00;
reg [ 7:0] xg31, xg30, xg29, xg28, xg27, xg26, xg25, xg24; // reg for connecting singal G
reg [ 7:0] xg23, xg22, xg21, xg20, xg19, xg18, xg17, xg16;
reg [ 7:0] xg15, xg14, xg13, xg12, xg11, xg10, xg09, xg08;
reg [ 7:0] xg07, xg06, xg05, xg04, xg03, xg02, xg01, xg00;
reg [14:0] xp31, xp30, xp29, xp28, xp27, xp26, xp25, xp24; // reg for connecting singal P
reg [14:0] xp23, xp22, xp21, xp20, xp19, xp18, xp17, xp16;
reg [14:0] xp15, xp14, xp13, xp12, xp11, xp10, xp09, xp08;
reg [14:0] xp07, xp06, xp05, xp04, xp03, xp02, xp01;
reg xc31, xc30, xc29, xc28, xc27, xc26, xc25, xc24; // reg for connecting singal ctrl
reg xc23, xc22, xc21, xc20, xc19, xc18, xc17, xc16;
reg xc15, xc14, xc13, xc12, xc11, xc10, xc09, xc08;
reg xc07, xc06, xc05, xc04, xc03, xc02, xc01;
reg [ 6:0] yph; // for ih in and_xor_7
always @ (posedge clk)
begin
xa31 <= ma31; xa30 <= ma30; xa29 <= ma29; xa28 <= ma28; xa27 <= ma27; xa26 <= ma26; xa25 <= ma25; xa24 <= ma24;
xa23 <= ma23; xa22 <= ma22; xa21 <= ma21; xa20 <= ma20; xa19 <= ma19; xa18 <= ma18; xa17 <= ma17; xa16 <= ma16;
xa15 <= ma15; xa14 <= ma14; xa13 <= ma13; xa12 <= ma12; xa11 <= ma11; xa10 <= ma10; xa09 <= ma09; xa08 <= ma08;
xa07 <= ma07; xa06 <= ma06; xa05 <= ma05; xa04 <= ma04; xa03 <= ma03; xa02 <= ma02; xa01 <= ma01; xa00 <= ma00;
xg31 <= mg31; xg30 <= mg30; xg29 <= mg29; xg28 <= mg28; xg27 <= mg27; xg26 <= mg26; xg25 <= mg25; xg24 <= mg24;
xg23 <= mg23; xg22 <= mg22; xg21 <= mg21; xg20 <= mg20; xg19 <= mg19; xg18 <= mg18; xg17 <= mg17; xg16 <= mg16;
xg15 <= mg15; xg14 <= mg14; xg13 <= mg13; xg12 <= mg12; xg11 <= mg11; xg10 <= mg10; xg09 <= mg09; xg08 <= mg08;
xg07 <= mg07; xg06 <= mg06; xg05 <= mg05; xg04 <= mg04; xg03 <= mg03; xg02 <= mg02; xg01 <= mg01; xg00 <= mg00;
xp31 <= mp31; xp30 <= mp30; xp29 <= mp29; xp28 <= mp28; xp27 <= mp27; xp26 <= mp26; xp25 <= mp25; xp24 <= mp24;
xp23 <= mp23; xp22 <= mp22; xp21 <= mp21; xp20 <= mp20; xp19 <= mp19; xp18 <= mp18; xp17 <= mp17; xp16 <= mp16;
xp15 <= mp15; xp14 <= mp14; xp13 <= mp13; xp12 <= mp12; xp11 <= mp11; xp10 <= mp10; xp09 <= mp09; xp08 <= mp08;
xp07 <= mp07; xp06 <= mp06; xp05 <= mp05; xp04 <= mp04; xp03 <= mp03; xp02 <= mp02; xp01 <= mp01;
xc31 <= mc31; xc30 <= mc30; xc29 <= mc29; xc28 <= mc28; xc27 <= mc27; xc26 <= mc26; xc25 <= mc25; xc24 <= mc24;
xc23 <= mc23; xc22 <= mc22; xc21 <= mc21; xc20 <= mc20; xc19 <= mc19; xc18 <= mc18; xc17 <= mc17; xc16 <= mc16;
xc15 <= mc15; xc14 <= mc14; xc13 <= mc13; xc12 <= mc12; xc11 <= mc11; xc10 <= mc10; xc09 <= mc09; xc08 <= mc08;
xc07 <= mc07; xc06 <= mc06; xc05 <= mc05; xc04 <= mc04; xc03 <= mc03; xc02 <= mc02; xc01 <= mc01;
Po[7] <= mp00[0];//np[0] output MSB of Po[]
yph <= mp00[14:8];
end
always @ (xa00,xg00,zp)
begin
Ao = xa00; // instead of ya
Go = xg00; // instead of yg
Po[6:0] = zp[6:0];
end
sys_block_8 u_matrix_31 (.clk(clk), .Ai(Ai), .Bi(Bi[255:248]), .Gi(Gi), .Pi(Pi), .ctrli(ctrl), .Ao(ma31), .Go(mg31), .Po(mp31), .ctrlo(mc31));
sys_block_8 u_matrix_30 (.clk(clk), .Ai(xa31), .Bi(Bi[247:240]), .Gi(xg31), .Pi(xp31), .ctrli(xc31), .Ao(ma30), .Go(mg30), .Po(mp30), .ctrlo(mc30));
sys_block_8 u_matrix_29 (.clk(clk), .Ai(xa30), .Bi(Bi[239:232]), .Gi(xg30), .Pi(xp30), .ctrli(xc30), .Ao(ma29), .Go(mg29), .Po(mp29), .ctrlo(mc29));
sys_block_8 u_matrix_28 (.clk(clk), .Ai(xa29), .Bi(Bi[231:224]), .Gi(xg29), .Pi(xp29), .ctrli(xc29), .Ao(ma28), .Go(mg28), .Po(mp28), .ctrlo(mc28));
sys_block_8 u_matrix_27 (.clk(clk), .Ai(xa28), .Bi(Bi[223:216]), .Gi(xg28), .Pi(xp28), .ctrli(xc28), .Ao(ma27), .Go(mg27), .Po(mp27), .ctrlo(mc27));
sys_block_8 u_matrix_26 (.clk(clk), .Ai(xa27), .Bi(Bi[215:208]), .Gi(xg27), .Pi(xp27), .ctrli(xc27), .Ao(ma26), .Go(mg26), .Po(mp26), .ctrlo(mc26));
sys_block_8 u_matrix_25 (.clk(clk), .Ai(xa26), .Bi(Bi[207:200]), .Gi(xg26), .Pi(xp26), .ctrli(xc26), .Ao(ma25), .Go(mg25), .Po(mp25), .ctrlo(mc25));
sys_block_8 u_matrix_24 (.clk(clk), .Ai(xa25), .Bi(Bi[199:192]), .Gi(xg25), .Pi(xp25), .ctrli(xc25), .Ao(ma24), .Go(mg24), .Po(mp24), .ctrlo(mc24));
sys_block_8 u_matrix_23 (.clk(clk), .Ai(xa24), .Bi(Bi[191:184]), .Gi(xg24), .Pi(xp24), .ctrli(xc24), .Ao(ma23), .Go(mg23), .Po(mp23), .ctrlo(mc23));
sys_block_8 u_matrix_22 (.clk(clk), .Ai(xa23), .Bi(Bi[183:176]), .Gi(xg23), .Pi(xp23), .ctrli(xc23), .Ao(ma22), .Go(mg22), .Po(mp22), .ctrlo(mc22));
sys_block_8 u_matrix_21 (.clk(clk), .Ai(xa22), .Bi(Bi[175:168]), .Gi(xg22), .Pi(xp22), .ctrli(xc22), .Ao(ma21), .Go(mg21), .Po(mp21), .ctrlo(mc21));
sys_block_8 u_matrix_20 (.clk(clk), .Ai(xa21), .Bi(Bi[167:160]), .Gi(xg21), .Pi(xp21), .ctrli(xc21), .Ao(ma20), .Go(mg20), .Po(mp20), .ctrlo(mc20));
sys_block_8 u_matrix_19 (.clk(clk), .Ai(xa20), .Bi(Bi[159:152]), .Gi(xg20), .Pi(xp20), .ctrli(xc20), .Ao(ma19), .Go(mg19), .Po(mp19), .ctrlo(mc19));
sys_block_8 u_matrix_18 (.clk(clk), .Ai(xa19), .Bi(Bi[151:144]), .Gi(xg19), .Pi(xp19), .ctrli(xc19), .Ao(ma18), .Go(mg18), .Po(mp18), .ctrlo(mc18));
sys_block_8 u_matrix_17 (.clk(clk), .Ai(xa18), .Bi(Bi[143:136]), .Gi(xg18), .Pi(xp18), .ctrli(xc18), .Ao(ma17), .Go(mg17), .Po(mp17), .ctrlo(mc17));
sys_block_8 u_matrix_16 (.clk(clk), .Ai(xa17), .Bi(Bi[135:128]), .Gi(xg17), .Pi(xp17), .ctrli(xc17), .Ao(ma16), .Go(mg16), .Po(mp16), .ctrlo(mc16));
sys_block_8 u_matrix_15 (.clk(clk), .Ai(xa16), .Bi(Bi[127:120]), .Gi(xg16), .Pi(xp16), .ctrli(xc16), .Ao(ma15), .Go(mg15), .Po(mp15), .ctrlo(mc15));
sys_block_8 u_matrix_14 (.clk(clk), .Ai(xa15), .Bi(Bi[119:112]), .Gi(xg15), .Pi(xp15), .ctrli(xc15), .Ao(ma14), .Go(mg14), .Po(mp14), .ctrlo(mc14));
sys_block_8 u_matrix_13 (.clk(clk), .Ai(xa14), .Bi(Bi[111:104]), .Gi(xg14), .Pi(xp14), .ctrli(xc14), .Ao(ma13), .Go(mg13), .Po(mp13), .ctrlo(mc13));
sys_block_8 u_matrix_12 (.clk(clk), .Ai(xa13), .Bi(Bi[103:96]), .Gi(xg13), .Pi(xp13), .ctrli(xc13), .Ao(ma12), .Go(mg12), .Po(mp12), .ctrlo(mc12));
sys_block_8 u_matrix_11 (.clk(clk), .Ai(xa12), .Bi(Bi[95:88]), .Gi(xg12), .Pi(xp12), .ctrli(xc12), .Ao(ma11), .Go(mg11), .Po(mp11), .ctrlo(mc11));
sys_block_8 u_matrix_10 (.clk(clk), .Ai(xa11), .Bi(Bi[87:80]), .Gi(xg11), .Pi(xp11), .ctrli(xc11), .Ao(ma10), .Go(mg10), .Po(mp10), .ctrlo(mc10));
sys_block_8 u_matrix_09 (.clk(clk), .Ai(xa10), .Bi(Bi[79:72]), .Gi(xg10), .Pi(xp10), .ctrli(xc10), .Ao(ma09), .Go(mg09), .Po(mp09), .ctrlo(mc09));
sys_block_8 u_matrix_08 (.clk(clk), .Ai(xa09), .Bi(Bi[71:64]), .Gi(xg09), .Pi(xp09), .ctrli(xc09), .Ao(ma08), .Go(mg08), .Po(mp08), .ctrlo(mc08));
sys_block_8 u_matrix_07 (.clk(clk), .Ai(xa08), .Bi(Bi[63:56]), .Gi(xg08), .Pi(xp08), .ctrli(xc08), .Ao(ma07), .Go(mg07), .Po(mp07), .ctrlo(mc07));
sys_block_8 u_matrix_06 (.clk(clk), .Ai(xa07), .Bi(Bi[55:48]), .Gi(xg07), .Pi(xp07), .ctrli(xc07), .Ao(ma06), .Go(mg06), .Po(mp06), .ctrlo(mc06));
sys_block_8 u_matrix_05 (.clk(clk), .Ai(xa06), .Bi(Bi[47:40]), .Gi(xg06), .Pi(xp06), .ctrli(xc06), .Ao(ma05), .Go(mg05), .Po(mp05), .ctrlo(mc05));
sys_block_8 u_matrix_04 (.clk(clk), .Ai(xa05), .Bi(Bi[39:32]), .Gi(xg05), .Pi(xp05), .ctrli(xc05), .Ao(ma04), .Go(mg04), .Po(mp04), .ctrlo(mc04));
sys_block_8 u_matrix_03 (.clk(clk), .Ai(xa04), .Bi(Bi[31:24]), .Gi(xg04), .Pi(xp04), .ctrli(xc04), .Ao(ma03), .Go(mg03), .Po(mp03), .ctrlo(mc03));
sys_block_8 u_matrix_02 (.clk(clk), .Ai(xa03), .Bi(Bi[23:16]), .Gi(xg03), .Pi(xp03), .ctrli(xc03), .Ao(ma02), .Go(mg02), .Po(mp02), .ctrlo(mc02));
sys_block_8 u_matrix_01 (.clk(clk), .Ai(xa02), .Bi(Bi[15:8]), .Gi(xg02), .Pi(xp02), .ctrli(xc02), .Ao(ma01), .Go(mg01), .Po(mp01), .ctrlo(mc01));
sys_block_8 u_matrix_00 (.clk(clk), .Ai(xa01), .Bi(Bi[7:0]), .Gi(xg01), .Pi(xp01), .ctrli(xc01), .Ao(ma00), .Go(mg00), .Po(mp00), .ctrlo(mc00));
//sys_block_8 u_matrix_2 (.clk(clk), .Ai(xp), .Bi(Bi[ 7:0]), .Gi(xg), .Pi(xp), .ctrli(xc), .Ao(na), .Go(ng), .Po(np), .ctrlo(nc));
and_xor_7 u_array_op (.ctrl(mc00), .il(mp00[7:1]), .ih(yph[6:0]), .o(zp));
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -