Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

courses:a4m36pap:cviceni4 [2010/10/19 14:13]
navara created
courses:a4m36pap:cviceni4 [2025/01/03 18:29] (aktuální)
Řádek 1: Řádek 1:
 ===== Cvičení 4 ===== ===== Cvičení 4 =====
 +
 +==== 1. ====
 +
 +<code verilog>
 +module sum(c, pg, p, s);
 +    input c;
 +    input pg;
 +    input p;
 +    output s;
 +    assign s = c ? pg : p;
 +endmodule
 +</​code>​
 +<code verilog>
 +module pg(x, y, g, p, pg);
 +    input x;
 +    input y;
 +    output g;
 +    output p;
 +    output pg;
 +    assign g = x & y;
 +    assign pg = y ? x : ~x;
 +    assign p = ~pg;
 +endmodule
 +</​code>​
  
 ==== 2. ==== ==== 2. ====
  
 +<code verilog>
 +module cla(p0, g0, p1, g1, p2, g2, p3, g3, c0, c1, c2, c3, Gg, Gp);
 +    input p0;
 +    input g0;
 +    input p1;
 +    input g1;
 +    input p2;
 +    input g2;
 +    input p3;
 +    input g3;
 +    input c0;
 +    output c1;
 +    output c2;
 +    output c3;
 +    output Gg;
 +    output Gp;
 +    assign c1 = g0 | p0 & c0;
 +    assign c2 = g1 | p1 & g0 | p1 & p0 & c0;
 +    assign c3 = g2 | p2 & g1 | p2 & p1 & g0 | p2 & p1 & p0 & c0;
 +    assign Gg = g3 | p3 & g2 | p3 & p2 & g1 | p3 & p2 & p1 & g0;
 +    assign Gp = p3 & p2 & p1 & p0;
 +endmodule
 +</​code>​
 +
 +==== 3. ====
 <code verilog> <code verilog>
 module clasum4(x, y, cin, s, p, g, cout); module clasum4(x, y, cin, s, p, g, cout);
Řádek 25: Řádek 74:
 endmodule endmodule
 </​code>​ </​code>​
 +
 +Alternativní řešení 4bit sčítačky pomocí modulů viz výše:
 +
 +<code verilog>
 +module add4(x, y, c, s, Gp, Gg);
 +    input [3:0] x;
 +    input [3:0] y;
 +    input c;
 +    output [3:0] s;
 +    output Gp;
 +    output Gg;    ​
 +    wire p0, g0, pg0, p1, g1, pg1, p2, g2, pg2, p3, g3, pg3, c1, c2, c3;   
 +    sum sum0(c, pg0, p0, s[0]);
 +    sum sum1(c1, pg1, p1, s[1]);
 +    sum sum2(c2, pg2, p2, s[2]);
 +    sum sum3(c3, pg3, p3, s[3]);
 +    pg pg_0(x[0], y[0], g0, p0, pg0);
 +    pg pg_1(x[1], y[1], g1, p1, pg1);
 +    pg pg_2(x[2], y[2], g2, p2, pg2);
 +    pg pg_3(x[3], y[3], g3, p3, pg3);
 +    cla cla(p0, g0, p1, g1, p2, g2, p3, g3, c, c1, c2, c3, Gg, Gp);
 +endmodule
 +</​code>​
 +<code verilog>
 +module add16(x, y, c, s, Sp, Sg);
 +    input [15:0] x;
 +    input [15:0] y;
 +    input c;
 +    output [15:0] s;
 +    output Sp;
 +    output Sg;
 +    wire Gp0, Gg0, Gp1, Gg1, Gp2, Gg2, Gp3, Gg3, c, Gc1, Gc2, Gc3;
 +    add4 add0_3(x[3:​0],​ y[3:0], c, s[3:0], Gp0, Gg0);
 +    add4 add4_7(x[7:​4],​ y[7:4], Gc1, s[7:4], Gp1, Gg1);
 +    add4 add8_11(x[11:​8],​ y[11:8], Gc2, s[11:8], Gp2, Gg2);
 +    add4 add12_15(x[15:​12],​ y[15:12], Gc3, s[15:12], Gp3, Gg3);
 +    cla gcla(Gp0, Gg0, Gp1, Gg1, Gp2, Gg2, Gp3, Gg3, c, Gc1, Gc2, Gc3, Sg, Sp);
 +endmodule
 +</​code>​
 +<code verilog>
 +module add64(x, y, c, s, Np, Ng, cout);
 +    input [63:0] x;
 +    input [63:0] y;
 +    input c;
 +    output [63:0] s;
 +    output Np;
 +    output Ng;
 +    output cout;
 +    wire Sp0, Sg0, Sp1, Sg1, Sp2, Sg2, Sp3, Sg3, c, Sc1, Sc2, Sc3;
 +    add16 add0_15(x[15:​0],​ y[15:0], c, s[15:0], Sp0, Sg0);
 +    add16 add16_31(x[31:​16],​ y[31:16], Sc1, s[31:16], Sp1, Sg1);
 +    add16 add32_47(x[47:​32],​ y[47:32], Sc2, s[47:32], Sp2, Sg2);
 +    add16 add48_63(x[63:​48],​ y[63:48], Sc3, s[63:48], Sp3, Sg3);
 +    cla scla(Sp0, Sg0, Sp1, Sg1, Sp2, Sg2, Sp3, Sg3, c, Sc1, Sc2, Sc3, Ng, Np);
 +    assign cout = Ng | Np & c;
 +endmodule
 +</​code>​
 +
 +==== 5. ====
 +
 +Vyšlo mi:
 +  * 3 úrovně CLA: 3(pg)+2*2(sejít na spodní CLA)+3*2(vystoupat přes c)+2(sum)=15
 +  * Zvlněný přenos: 3(1. sečtení)+63*2(průchod c)=129
 +  * zhruba 9x rychlejší (8,6 nebo 9,2, pokud se NOT nepočítá jako hradlo)
 +
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  
  
courses/a4m36pap/cviceni4.1287490400.txt.gz · Poslední úprava: 2025/01/03 18:25 (upraveno mimo DokuWiki)
Nahoru
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0