verilog - 注册类型变量给出错误:未知类型
问题描述
我正在制作一个 1 位正沿 Dflipflop。只有在时钟信号的上升沿出现时,才应分配所有输出。Q 与 D 相同,Qbar 是 D 的否定。
当我将 Qbar 用作电线时,它会以某种方式起作用。
assign Qbar = ~Q;
在总是块之外。但是下面的原始代码给出了一个错误,即“=”附近的语法错误和“Qbar 是未知类型”
我试图使 Qbar 分配成为非阻塞类型,但它没有效果。
module DFlipFlop(
input D,
input clk,
output reg Qbar,
output reg Q
);
//assign Qbar = ~D;
always @(posedge clk)
Q = D;
Qbar = ~D;
endmodule
我在这里想念什么?我是verilog的新手。
解决方案
您的错误消息是由于在 Verilog 中,如果您在 always 块中有多个语句(在其他地方也是如此),则它必须包含在begin
-end
构造中。所以,你需要这个:
module DFlipFlop(
input D,
input clk,
output reg Qbar,
output reg Q
);
always @(posedge clk) begin
Q = D;
Qbar = ~D;
end
endmodule
但是,这不是一个好的解决方案,因为
i)(除非您知道自己在做什么)始终对要在综合后变为触发器的变量使用非阻塞分配,并且
ii) 无论如何,使用wire
andassign
语句可能是一个更好的解决方案,因为(至少最初)如果你在一个时钟always
块内分配两个单独的变量,你的合成器输出两个触发器 - 一个 forQ
和一个 for Qbar
。
这是一个更好的解决方案:
module DFlipFlop(
input D,
input clk,
output Qbar,
output reg Q
);
always @(posedge clk)
Q <= D;
assign Qbar = ~Q;
endmodule
推荐阅读
- python - Python 写的 CSV 限制为 5 行
- android - 在 Android 中使用 androidx Biometric API 进行人脸身份验证
- azure - 使用带有 Golang 的客户端证书获取访问令牌 Azure AD
- sockets - 打开的套接字是否允许入站流量?
- html - Youtube 订阅嵌入正在切断我图像的角落
- react-native - 有谁知道如何在 React Native 中创建这个组件?
- c++ - 如何在 QtCreator 中使用 qmake 和 MinGW32 链接动态库?
- java - 如何使用 Executor Framework 使用所有 4 个 CPU 内核执行操作?
- sitecore - 如何在 Sitecore SXA 元数据部分设计中使用令牌?
- orm - 区分 knex 客户端和 knex 事务