zakladni struktura modulu:
module modulename(portlist); port declarations datatype declarations circuit functionality timing spec endmodule
/* komentar */ /* viceradkovy komentar*/ // komentar
Are sized or unsized: <size>'<base format><number>
Defaults:
Base Format:
Negative numbers - specified by putting a minus sign before the <size>
Special Number Characters:
Aritmetika:
Bitove operace:
Redukcni operatory:
Porovnani
Logicke operace
Ostatni sajrajt
Priorita
Definice symbolicke konstanty:
parameter size = 8;
Definice 8bitoveho registru:
reg [7:0] tmp;
Prubezne prirazeni:
wire adder_out = mult_out + out
nebo
wire adder_out; assign adder_out = mult_out + out
Prirazeni:
if .. else
always @(sela or selb or a or b or c)
begin
if (sela)
q = a;
else
if (selb)
q = b;
else
q = c;
end
case
always @(sel or a or b or c or d)
begin
case (sel)
2'b00 : q = a;
2'b01 : q = b;
2'b10 : q = c;
default :q = d;
endcase
end
casez, casex
casez (encoder) 4'b1??? : high_lvl = 3; 4'b01?? : high_lvl = 2; 4'b001? : high_lvl = 1; 4'b0001 : high_lvl = 0; default : high_lvl = 0; endcase casex (encoder) 4'b1xxx : high_lvl = 3; 4'b01xx : high_lvl = 2; 4'b001x : high_lvl = 1; 4'b0001 : high_lvl = 0; default : high_lvl = 0; endcase
forever – cykli donekonecna
initial begin clk = 0; forever #25 clk = ~clk; end
repeat – cykli prave x-krat
repeat (8)
begin
tmp = data[15];
data = {data << 1, temp};
end
while – podmineny cyklus
while (count < 101)
begin
$display (“Count = %d”, count);
count = count + 1;
end
for
for (i = 4; i <= 7; i = i + 1) begin result[i] = result[i-4]; end
Inicializacni blok
initial
begin
b = 1'b1;
#5 c = 1'b0;
#10 d = 1'b0;
end
User defined primitives
primitive latch (q, clock,data); // Level sensitive, active low output q; reg q; input clock, data; initial q = 1'b0; // Output is initialized to 1'b0. // Change 1'b0 to 1'b1 for power up Preset table // clock data current state next state 0 1 :?: 1; 0 0 :?: 0; 1 ? :?: -; // '-' = no change endtable endprimitive
always @(a or b or c or d or sel)
begin
case (sel)
2'b00: mux_out = a;
2b'01: mux_out = b;
2b'10: mux_out = c;
2'b11: mux_out = d;
endcase
module mult_acc (out, ina, inb, clk, clr); input [7:0] ina, inb; input clk, clr; output [15:0] out; wire [15:0] mult_out, adder_out; reg [15:0] out; parameter set = 10; parameter hld = 20; assign adder_out = mult_out + out; always @ (posedge clk or posedge clr) begin if (clr) out = 16'h0000; else out = adder_out; end multa u1(.in_a(ina), .in_b(inb), .m_out(mult_out)); specify $setup (ina, posedge clk, set); $hold (posedge clk, ina, hld); $setup (inb, posedge clk, set); $hold (posedge clk, inb, hld); endspecify endmodule