⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo_32_8.v

📁 脉动乘法器:一个GF(2m)域上的Digit-Serial 脉动结构(Systolic)的乘法器
💻 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 + -