저는 Verilog를 처음 사용하고 있으며 두 개의 모듈을 정의하는 verilg 코드를 작업 중입니다. 첫 번째 모듈은 두 숫자의 모듈을 계산하고 두 번째 모듈은 결과를 사용하여 숫자에 대한 연산을 수행합니다.Verilog의 타이밍 문제
두 모듈 모두에서 동일한 clk가 사용 되었기 때문에 결과가 잘못되었고 값을 신경 쓰지 않아도됩니다. 동기화를위한 제안 사항.
국방부 모듈 상부 모듈의
module mod(m,a,b);
input [15:0] a,b;
output [15:0] m;
reg [31:0] mod;
reg [31:0] mul;
integer i;
always @* begin
mul = a*b;
mod = 32'h80008000;
for(i=0;i<16;i=i+1) begin
if(mul > mod) begin
mul = mul - mod;
mod = mod >> 1;
end
else begin
mod = mod >> 1;
end
end
assign m=mul[15:0];
endmodule
부 :
initial begin
keyp <= 2'b10;
shift <= 1'b0;
end
always @(posedge clk) begin
if(load)
case (keyp)
2'b10: begin
key[127:64] <= {k1,k0};
keyp <= 2'b01;
end
2'b01: begin
key[63:0] <= {k1,k0};
keyp <= 2'b00;
shift <= 1'b1;
end
//default: keyp <=2'b00;
endcase
else if (shift) begin
//shift key for first round
temp[24:0] <= key[127:103];
key[127:25] <= key[102:0];
key [24:0] <= temp [24:0];
shift <= 1'b0;
end
end
assign w1[2*SIZE-1:SIZE] = d1+key[2*SIZE-1:SIZE];
assign w1[3*SIZE-1:2*SIZE] = d2+key[3*SIZE-1:2*SIZE];
mod mod1(w1[SIZE-1:0], d0, key[SIZE-1:0] );
mod mod2(w1[4*SIZE-1:3*SIZE], d3, key[4*SIZE-1:3*SIZE]);
[다른 답변, 섹션 2] (http://stackoverflow.com/questions/14083475/incrementing-a-counter-variable-in-verilog-combinational-or-sequential/14085967#14085967) 좋아, 조합 블록에서 과제의 양면에 같은 용어를 사용하는 것) – Morgan