verilog - ModelSim 中的错误,“=”附近:语法错误,意外的“=”。在“Y”之后的范围内发现语法错误。是否缺少'::'?
问题描述
我正在制作主 JK 触发器,错误如下:
** Error: (vlog-13069) C:/Windows/System32/ssy_1775_final.v(13): near "=": syntax error, unexpected '='.
** Error: C:/Windows/System32/ssy_1775_final.v(13): (vlog-13205) Syntax error found in the scope following 'Y'. Is there a missing '::'?
我制作的代码如下:
module JK_FlipFlop(J, K, clk, Y_BAR, Y, Q);
input J, K, clk;
output Y, Q;
reg Y_BAR;
wire Y, Q;
always@(posedge clk)
assign Y_BAR = ~Y;
begin
if(J==0 && K==0)
begin Y=Y; Y_BAR=Y_BAR; end
else if(J==0 && K==1)
begin Y<=1'b0; Y_BAR<=1'b1; end
else if(J==1 && K==0)
begin Y<=1'b1; Y_BAR<=1'b0; end
else if(J==1 && K==1)
begin Y=Y_BAR; Y_BAR=Y; end
end
always@(negedge clk)
begin
if(Y==0 && Y_BAR==0)
begin end
else if(Y==0 && Y_BAR==1)
begin Q<=1'b0; end
else if(Y==1 && Y_BAR==0)
begin Q<=1'b1; end
else if(Y==1 && Y_BAR==1)
begin Q<=~Q; end
end
endmodule
我不知道为什么会出现错误。
我祈祷有人会放过我。
解决方案
您的端口和信号声明中有多个错误。由于您对所有输出进行程序分配,因此它们都必须声明为reg
,而不是wire
。要减少信号名称重复,从而避免此类常见错误,请使用 ANSI 样式端口,如下所示。
另一个问题是您不应该在块assign
内使用关键字。always
以下代码编译没有错误:
module JK_FlipFlop (
input J, K, clk,
output reg Y, Q, Y_BAR
);
always@(posedge clk)
begin
Y_BAR = ~Y;
if(J==0 && K==0)
begin Y=Y; Y_BAR=Y_BAR; end
else if(J==0 && K==1)
begin Y<=1'b0; Y_BAR<=1'b1; end
else if(J==1 && K==0)
begin Y<=1'b1; Y_BAR<=1'b0; end
else if(J==1 && K==1)
begin Y=Y_BAR; Y_BAR=Y; end
end
always@(negedge clk)
begin
if(Y==0 && Y_BAR==0)
begin end
else if(Y==0 && Y_BAR==1)
begin Q<=1'b0; end
else if(Y==1 && Y_BAR==0)
begin Q<=1'b1; end
else if(Y==1 && Y_BAR==1)
begin Q<=~Q; end
end
endmodule
如果您改进缩进,您的代码会更容易理解。
推荐阅读
- c++ - FFTW 高级接口:fftw_plan_many_r2r() 不起作用
- angular - Angular 5 数据可视化 - 仪表板框架
- python-3.x - 在 python3 中使用 u 前缀获取输出的好方法是什么
- .net - docker dotnet 镜像文件创建
- react-native - 如何延迟调用 AppRegistry.registerComponent
- javascript - 如何在 fabric.util 类结构版本 2 中扩展成员(属性)?
- join - 我可以在 snappy 数据中加入三个表吗
- javascript - 选项卡更改或打开检查元素后模糊()不触发
- c# - 如何修复远程名称无法在 C# HTTP 请求中解析;
- tableau-api - 通过rest api重置tableau视图的默认过滤器