verilog最最基本的知识 reg wire

1.输出寄存器reg类型

module  QQ(a,b,c,clk);
input  a,b,clk;
output reg c;
always@(posedge clk) c=a+b;
endmodule 

在这里插入图片描述
可以看到输出c有一个寄存器驱动
2.输出寄存器类型,但没有触发条件时,软件会自动将触发器综合掉

module  QQ(a,b,c,clk);
input  a,b,clk;
output reg c;
always@* c=a+b;
endmodule 

在这里插入图片描述
3输出线型wire
(1)在always块中赋值给wire类型是不允许的

module  QQ(a,b,c,clk);
input  a,b,clk;
output wire c;
always@* c=a+b;
endmodule 

会报错Error (10137): Verilog HDL Procedural Assignment error at QQ.v(4): object “c” on left-hand side of assignment must have a variable data type
assignment:赋值
(2)输入定义为reg类型是不允许的

module  QQ(a,b,c,clk);
input reg a,b,clk;
output  c;
assign c=a+b;
endmodule  

报错Error (10279): Verilog HDL Port Declaration error at QQ.v(2): input port(s) cannot be declared with type “reg”
寄存器类型一般需要信号触发的,已经是输入了还怎么触发?这里quartus直接报错,不会综合掉
(3)正确写法

module  QQ(a,b,c,clk);
input a,b,clk;
output  c;
assign c=a+b;
endmodule 

在这里插入图片描述

总结:

1.reg类型只能在always块中赋值,wire在assign中赋值
2.输入只能wire型,输出可wire可reg

发布了56 篇原创文章 · 获赞 12 · 访问量 7849

猜你喜欢

转载自blog.csdn.net/weixin_44884357/article/details/105402101
今日推荐