总是在任务中?
Always in a task?
我正在使用 Verilog 对 FPGA 进行编程。
我有我的顶层模块,我想调用一个包含 always
块的 Task
。
Task
是串口序列化一个字节的例程。 (输入:baudrate_clk,bytetosend;输出:TxD,这是物理输出引脚)
module serial();
task serial;
input baudrate;
input [7:0] data;
output TxD;
reg [3:0] state;
begin
always @(posedge baudrate) begin
case(state)
// ...
endcase
end
end
always @(state[2:0]) begin
case(state[2:0])
// ...
endcase
end
assign TxD ...
end
endtask
endmodule
我在第一个 always
、always @(posedge baudrate) begin
得到一个 unexpected token: 'always'
我读到 Task could include wait, posedge etc...
如果我不能使用 Taks,我可以用什么来达到这个目的?
谢谢。
要么你的任务应该是一个模块,要么你应该在你的任务中使用循环。很难看出您的设计意图,但在我看来,在这种情况下您需要一个模块,而不是任务。
任务包含顺序代码,就像 always 块一样。任务只是另一个放置可以放在 always 块中的代码的地方。将 always 块放在任务中是没有意义的。
我正在使用 Verilog 对 FPGA 进行编程。
我有我的顶层模块,我想调用一个包含 always
块的 Task
。
Task
是串口序列化一个字节的例程。 (输入:baudrate_clk,bytetosend;输出:TxD,这是物理输出引脚)
module serial();
task serial;
input baudrate;
input [7:0] data;
output TxD;
reg [3:0] state;
begin
always @(posedge baudrate) begin
case(state)
// ...
endcase
end
end
always @(state[2:0]) begin
case(state[2:0])
// ...
endcase
end
assign TxD ...
end
endtask
endmodule
我在第一个 always
、always @(posedge baudrate) begin
unexpected token: 'always'
我读到 Task could include wait, posedge etc...
如果我不能使用 Taks,我可以用什么来达到这个目的?
谢谢。
要么你的任务应该是一个模块,要么你应该在你的任务中使用循环。很难看出您的设计意图,但在我看来,在这种情况下您需要一个模块,而不是任务。 任务包含顺序代码,就像 always 块一样。任务只是另一个放置可以放在 always 块中的代码的地方。将 always 块放在任务中是没有意义的。