mirror of https://github.com/YosysHQ/yosys.git
48 lines
1.1 KiB
Verilog
48 lines
1.1 KiB
Verilog
|
/*
|
||
|
Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 77].
|
||
|
*/
|
||
|
module top(clk,a,b,c,set);
|
||
|
parameter A_WIDTH = 6 /*4*/;
|
||
|
parameter B_WIDTH = 6 /*3*/;
|
||
|
input set;
|
||
|
input clk;
|
||
|
input signed [(A_WIDTH - 1):0] a;
|
||
|
input signed [(B_WIDTH - 1):0] b;
|
||
|
output signed [(A_WIDTH + B_WIDTH - 1):0] c;
|
||
|
reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
|
||
|
assign c = reg_tmp_c;
|
||
|
always @(posedge clk)
|
||
|
begin
|
||
|
if(set)
|
||
|
begin
|
||
|
reg_tmp_c <= 0;
|
||
|
end
|
||
|
else
|
||
|
begin
|
||
|
reg_tmp_c <= a * b + c;
|
||
|
end
|
||
|
end
|
||
|
endmodule
|
||
|
|
||
|
module top2(clk,a,b,c,hold);
|
||
|
parameter A_WIDTH = 6 /*4*/;
|
||
|
parameter B_WIDTH = 6 /*3*/;
|
||
|
input hold;
|
||
|
input clk;
|
||
|
input signed [(A_WIDTH - 1):0] a;
|
||
|
input signed [(B_WIDTH - 1):0] b;
|
||
|
output signed [(A_WIDTH + B_WIDTH - 1):0] c;
|
||
|
reg signed [A_WIDTH-1:0] reg_a;
|
||
|
reg signed [B_WIDTH-1:0] reg_b;
|
||
|
reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
|
||
|
assign c = reg_tmp_c;
|
||
|
always @(posedge clk)
|
||
|
begin
|
||
|
if (!hold) begin
|
||
|
reg_a <= a;
|
||
|
reg_b <= b;
|
||
|
reg_tmp_c <= reg_a * reg_b + c;
|
||
|
end
|
||
|
end
|
||
|
endmodule
|