Professional Documents
Culture Documents
adder #(.WIDTH(3)) a
(.sum(out), .overflow( ), .a(in), .b(3'b000), .cin(1'b1));
endmodule
overflow
205
Advanced Verilog – Generate Statements
module adder #(parameter WIDTH=1) (sum, overflow, a, b, cin);
output logic [WIDTH-1:0] sum;
output logic overflow;
input logic [WIDTH-1:0] a, b;
input logic cin;
genvar i;
generate
for(i=0; i<WIDTH; i++) begin : subAdders
fullAdder fa(.sum(sum[i]), .cout(carries[i+1]),
.cin(carries[i]), .a(a[i]), .b(b[i]));
end
endgenerate
always_comb begin
if (a == 2'b01)
b = c;
else
b = a;
end
207
Advanced Verilog – Complex “If” Synthesis
logic [1:0] a, b, c;
always_comb begin
if (a == 2'b01)
b = c;
else
c = a + b;
end
208
Advanced Verilog – “Case” Synthesis
input w;
A: if (w) ns = B;
else ns = A;
B: if (w) ns = C;
else ns = A;
C: if (w) ns = C;
else ns = A;
endcase
end
209
Advanced Verilog – “Posedge” Statements
logic [1:0] ps, ns;
parameter [1:0] Start = 2'b01;
210
Advanced Verilog - Counters
logic [3:0] out;
211
Advanced Verilog – Histogram
logic [1:0] inVal;
logic [3:0] count00, count01, count10, count11;
212
Advanced Verilog – Less Than
logic [3:0] a, b;
always_comb begin
lessThan = (a<b);
end
213
Advanced Verilog – Sequential Statements
input logic [2:0] i0, i1;
output logic [2:0] o0, o1;
always_comb begin
o0 = i0;
o1 = i1;
if (o1 < o0) begin
o1 = i0;
o0 = i1;
end
end
214
Advanced Verilog – For Loops
output logic [1:0] result;
input logic [1:0] vals [3:0];
integer i;
always_comb begin
result = vals[0];
for(i=1; i<4; i++)
if (vals[i] != 2'b00)
result = vals[i];
end
215