F
FrankCh
Guest
Eu escrevi uma tarefa de alimentar vetores de teste para o meu projeto, porém, percebi que alguns
diferenças entre
"tarefa" e as máquinas de estado normal, eu costumava fazer.Um código de exemplo abaixo, eu
estou esperando o
o sinal "trd_sample" de ser adiada por um ciclo de "trc", ou seja, 2
posedge do TRC.Contudo,
Porque é que a simulação mostra no primeiro posedge de TRC?
Eu coloquei a onda ModelSim aqui.<img src="http://img234.imageshack.us/img234/5034/confusedtask7bg.jpg" border="0" alt="Confused with "task" keyword, what happened here?" title="Confundida com a "tarefa" palavra-chave, o que aconteceu aqui?"/>Thank you in advance.
sim módulo;
reg clk;
rst_n reg;
TRW reg;
reg [3:0] trd;
reg trc;
reg [3:0] trd_sample;
sempre # 5 clk <= clk ~;
initial begin
clk <= 1'b0;
rst_n <= 1'b1;
# 1 rst_n <= 1'b0;
# 2 rst_n <= 1'b1;
tx_in;
$ stop ();
fimtx_in tarefa;
inteiro i, j;
começo
@ (Posedge clk);
@ (Posedge clk);
trc <= 1'b0;
TRW <= 1'b0;
trd <= 4'h0;
@ (Posedge clk);
trc <= 1'b1;
TRW <= 1'b1;
trd <= 4'hA;
@ (Posedge clk);
trc <= 1'b0;
@ (Posedge clk);
trc <= 1'b1;
trd <= 4'h9;
@ (Posedge clk);
trc <= 1'b0;
@ (Posedge clk);
trc <= 1'b1;
trd <= 4'h8;
@ (Posedge clk);
trc <= 1'b0;
@ (Posedge clk);
trc <= 1'b1;
trd <= 4'h7;
@ (Posedge clk);
@ (Posedge clk);
@ (Posedge clk);
@ (Posedge clk);
fim
EndTask
always @ (posedge trc ou negedge rst_n) começam
if (~ rst_n)
trd_sample <= 4'h0;
else begin
if (TRW)
trd_sample <= TRD;
fim
fim
endmodule
diferenças entre
"tarefa" e as máquinas de estado normal, eu costumava fazer.Um código de exemplo abaixo, eu
estou esperando o
o sinal "trd_sample" de ser adiada por um ciclo de "trc", ou seja, 2
posedge do TRC.Contudo,
Porque é que a simulação mostra no primeiro posedge de TRC?
Eu coloquei a onda ModelSim aqui.<img src="http://img234.imageshack.us/img234/5034/confusedtask7bg.jpg" border="0" alt="Confused with "task" keyword, what happened here?" title="Confundida com a "tarefa" palavra-chave, o que aconteceu aqui?"/>Thank you in advance.
sim módulo;
reg clk;
rst_n reg;
TRW reg;
reg [3:0] trd;
reg trc;
reg [3:0] trd_sample;
sempre # 5 clk <= clk ~;
initial begin
clk <= 1'b0;
rst_n <= 1'b1;
# 1 rst_n <= 1'b0;
# 2 rst_n <= 1'b1;
tx_in;
$ stop ();
fimtx_in tarefa;
inteiro i, j;
começo
@ (Posedge clk);
@ (Posedge clk);
trc <= 1'b0;
TRW <= 1'b0;
trd <= 4'h0;
@ (Posedge clk);
trc <= 1'b1;
TRW <= 1'b1;
trd <= 4'hA;
@ (Posedge clk);
trc <= 1'b0;
@ (Posedge clk);
trc <= 1'b1;
trd <= 4'h9;
@ (Posedge clk);
trc <= 1'b0;
@ (Posedge clk);
trc <= 1'b1;
trd <= 4'h8;
@ (Posedge clk);
trc <= 1'b0;
@ (Posedge clk);
trc <= 1'b1;
trd <= 4'h7;
@ (Posedge clk);
@ (Posedge clk);
@ (Posedge clk);
@ (Posedge clk);
fim
EndTask
always @ (posedge trc ou negedge rst_n) começam
if (~ rst_n)
trd_sample <= 4'h0;
else begin
if (TRW)
trd_sample <= TRD;
fim
fim
endmodule