----关于reg和wire
1.wire表示直通,即输入有变化,输出立即无条件变化(如与非门的简单连接),相当于物理连线,需要持续的驱动,用在连续赋值语句中。wire若无驱动器连接,其值为z
reg表示一定要有触发,输出才会反应输入变化,相当于存储单元保持最后一次赋的值,用在过程赋值语句中(initial,always),默认值为不定值x。
2.如果不指定为reg类型,默认为1位wire类型。
wire只能被assign连续赋值,reg只能在always和initial过程块中赋值。
3.输入端口可以由wire/reg驱动,但类型只能是wire;输出端口可以是wire或者reg类型,若输出端口在过程块外赋值则为net类型(wire/tri),在过程块内赋值则为reg
4.inout声明的双向端口只能是wire,不能声明为reg类型。
Register型变量只能通过过程赋值语句赋值,不能用assign语句赋值。
在过程块内被赋值的信号必须定义为Register类型。
5.Reg型变量既可以生成触发器,也可以生成组合逻辑,wire型变量只能生成组合逻辑。
module clock_division(input clk,input rst,output clk_div);
reg [22:0]cnt;
parameter freq=50_000_000;
always@(posedge clk or negedge rst)
begin
if(!rst)
cnt<=23'b0;
else if(cnt<freq)
cnt<=cnt+1'b1;
else
cnt<=23'd0;//cnt为reg类型,只能在always和initial过程块中赋值:过程赋值语句
end
assign clk_div=(cnt==23'd49_99999)?1'b1:1'b0;//clk_div为wire类型(缺省),只能被assign连续赋值:连续赋值语句
endmodule
6.关于阻塞赋值与非阻塞赋值
【59传奇】