logic - Johnson 计数器语法错误。意外令牌:生成
问题描述
我的大学老师要求我实现一个 Johnson Counter 和它的测试台,宽度<=32(他称之为 N 参数),并且实现必须使用generate/for
结构。虽然对Johnson Counter有所了解,但不知道generate
在这种情况下如何使用,并且在尝试运行测试台时出现了一些错误。到目前为止,这是我的实现:
module johnsonCounter #(parameter N = 32)
(
input clk,
input rstn,
output reg [N-1:0] out
);
always @ (posedge clk) begin
if (!rstn)
out <= 1;
else begin
out[N-1] <= ~out[0];
generate
for (int i = 0; i < N-1; i=i+1) begin
out[i] <= out[i+1];
end
endgenerate
end
end
endmodule
这是测试台:
module tb;
parameter N = 32;
reg clk;
reg rstn;
wire [N-1:0] out;
johnsonCounter u0 (.clk (clk),
.rstn (rstn),
.out (out));
always #10 clk = ~clk;
initial begin
{clk, rstn} <= 0;
$monitor ("T=%0t out=%b", $time, out);
repeat (2) @(posedge clk);
rstn <= 1;
repeat (15) @(posedge clk);
$finish;
end
initial begin
$dumpvars;
$dumpfile("dump.vcd");
end
endmodule
这些是错误:
ERROR VCP2000 "Syntax error. Unexpected token: generate[_GENERATE]. This is a Verilog keyword since IEEE Std 1364-2001 and cannot be used as an identifier. Use -v95 argument for compilation." "design.sv" 13 7
ERROR VCP2020 "begin...end pair(s) mismatch detected. 2 <end> tokens are missing." "design.sv" 17 7
ERROR VCP2020 "module/macromodule...endmodule pair(s) mismatch detected. 1 <endmodule> tokens are missing." "design.sv" 17 7
ERROR VCP2000 "Syntax error. Unexpected token: endgenerate[_ENDGENERATE]. This is a Verilog keyword since IEEE Std 1364-2001 and cannot be used as an identifier. Use -v95 argument for compilation." "design.sv" 17 7
欢迎任何帮助=)
解决方案
以这种方式使用是非法的generate
。
对于您的代码,只for
需要一个循环(没有generate
):
always @ (posedge clk) begin
if (!rstn)
out <= 1;
else begin
out[N-1] <= ~out[0];
for (int i = 0; i < N-1; i=i+1) begin
out[i] <= out[i+1];
end
end
end
有关generate
语法,请参阅 IEEE Std 1800-2017,第 27 节。生成构造。
推荐阅读
- python - Ubuntu20.04python3.8安装Abe包,出现错误:“NameError: name'execfile' is not defined”
- ms-access - MS Access:如果我在一个表中从 maximo 导入数据,我还能在同一个表中添加我自己的字段吗?
- python - 最小化 API 调用次数
- node.js - Mongoose 更新位置的 Array 字段
- anaconda - Anaconda - JupyterLab - spaCy:终端中的“没有名为 spacy 的模块”
- neo4j - 如何解决 Neo4j 中的以下查询?列出属于员工“……”管理的部门的项目名称。
- android - 返回命令和变量 adb Shell
- c# - 如何在 Azure 中返回简单的时间戳输出?
- google-cloud-vision - TextAnnotation blocktype 仅显示文本
- bash - 默认的 root bash 提示符是什么?