例4.15:三态双向驱动器设计实例。
module bidir(tri_inout,out,in,en,b); //模块声明
inout tri_inout;
output out;
input in,en,b; //端口声明
assign tri_inout = en? in : 'bz; //三态门的输入为in
assign out = tri_inout ^ b; //三态门的输出为b
endmodule
2.时序逻辑电路设计实例
例4.16:触发器设计实例。
module dff( q,data,clk); //模块声明
output q;
input data,clk; //端口声明
reg q;
always @( posedge clk ) begin //边缘检测
q = data; //通过always语句,实现触发器
end
endmodule
例4.17:电平敏感型锁存器设计实例一(assign语句)。
module latch1( q,data,clk); //模块声明
output q;
input data,clk; //端口声明
assign q = clk ? data : q; //通过assign语句,实现的是一个锁存器
endmodule
例4.18:带置位和复位端的电平敏感型锁存器设计实例二(assign语句)。
module latch2( q,data,clk,set,reset); //模块声明
output q;
input data,clk,set,reset; //端口声明
assign q= reset ? 0 : ( set? 1:(clk? data : q ) );
//通过assign语句,实现的是一个锁存器
//其中,set为置位端,reset为复位端
//在clk为高电平时,锁存data,否则保持q值
endmodule
例4.19:电平敏感型锁存器设计实例三(always块)。
module latch3( q, data, clk); //模块声明
output q;
input data,clk; //端口声明
reg q;
always @(clk or data) begin //电平检测
if(clk) //clk为高电平时,q锁存data值
q = data;
end
endmodule
注意 有的综合器会产生一个警告信息,提示将产生了一个电平敏感型锁存器。因为此例中设计的就是一个电平敏感型锁存器,所以这个警告信息是没有问题的。
例4.20:移位寄存器设计实例。
module shifter( din,clk,clr,dout); //模块声明
input din,clk,clr;
output [7:0] dout; //端口声明
reg [7:0] dout;
always @(posedge clk) begin
if(clr) //清零
dout = 8'b0;
else begin
dout = dout<<1; //左移一位
dout[0] = din; //把输入信号放入寄存器的最低位
end
end
endmodule
例4.21:8位计数器设计实例一。
本文关键字:风格 电脑-单片机-自动控制,电子学习 - 基础知识 - 电脑-单片机-自动控制