一、门电路
1、与门
(1)创建一个实现“与”门的模块。
该电路现在有三根线(a,b,和out)。导线a和b已经通过输入端口将值驱动到导线上。但是,电线out目前不受任何驱动。写一个assign声明驱动器out与信号的ANDa和b。
(2)解决方案
module top_module(
input a,
input b,
output out );
assign out=a&&b;
endmodule
(3)仿真图
这里说下编程输入只能在网页是英文下才能输入
2、或非门
(1)创建一个实现“或非”门的模块。
或非门是其输出取反的或门。用Verilog编写时,NOR函数需要两个运算符。
(2)解决方案
module top_module(
input a,
input b,
output out );
assign out=!(a||b);
endmodule
(3)仿真图
二、组合电路
1、半加器
(1)创建一个半加法器。半加法器将两个位相加(无进位),并产生总和和进位。
(2)解决方案
module top_module(
input a, b,
output cout, sum );
assign cout=a&b;
assign sum=a^b;
endmodule
(3)结果
2、二对一多路复用
(1)创建一个1位宽的2比1多路复用器。当sel = 0时,选择一个。当sel = 1时,选择b。
(2)解决方案
module top_module(
input a, b, sel,
output out );
assign out=sel?b:a;
endmodule
(3)仿真图
3、7420芯片
(1)7400系列集成电路是一系列数字芯片,每个芯片都有几个门。7420是具有两个4输入与非门的芯片。
创建具有与7420芯片相同功能的模块。它具有8个输入和2个输出。
(2)解决方案
module top_module (
input p1a, p1b, p1c, p1d,
output p1y,
input p2a, p2b, p2c, p2d,
output p2y );
assign p1y=!(p1a&&p1b&&p1c&&p1d);
assign p2y=!(p2a&&p2b&&p2c&&p2d);
endmodule
(3)仿真图
三、时序电路
1、四位二进制计数器
(1)构建一个4位二进制计数器,该计数器的计数范围为0到15(含0和15),周期为16。复位输入是同步的,应将计数器复位为0。
(2)解决方案
module top_module (
input clk,
input reset, // Synchronous active-high reset
output [3:0] q);
always @(posedge clk)
begin
if(reset||q[3:0]==1111)
q<=0;
else
q[3:0]<=q[3:0]+1;
end
endmodule
(3)仿真图
2、D触发器
(1)AD触发器是一种存储位的电路,并在时钟信号的(通常)上升沿定期进行更新
(2)解决方案
module top_module (
input clk, // Clocks are used in sequential circuits
input d,
output reg q );//
// Use a clocked always block
// copy d to q at every positive edge of clk
// Clocked always blocks should use non-blocking assignments
always @(posedge clk)
begin
q<=d;
end
endmodule
(3)仿真图
3、同步复位D触发器
(1)创建具有高电平有效同步复位的8个D触发器。所有DFF应由clk的上升沿触发。
(2)代码
module top_module (
input clk,
input reset, // Synchronous reset
input [7:0] d,
output [7:0] q
);
always @(posedge clk)
begin
if(reset)
q=0;
else
q<=d;
end
endmodule
(3)仿真图