门电路相关练习
1.非门
代码
module top_module( input in, output out );
assign out=~in;
endmodule
结果
2.与门
代码
module top_module(
input a,
input b,
output out );
assign out=a&b;
endmodule
结果
3.或非门
代码
module top_module(
input a,
input b,
output out );
assign out=~(a|b);
endmodule
结果
组合电路
1.Three Modules(Module shift) 给定一个名为my_dff的模块,包含两个输入和一个输出(实现D触发器的功能)。实例化三个my_dff,然后将他们连接在一起,构造成长度为3的移位寄存器。注意:clk端口需要连接到所有的寄存器实例上。
代码:
module top_module ( input clk, input d, output q );
wire a,b; // 声明两个wire变量,命名为a,b
// 对my_dff进行了三次实例化,用了三个不同的名字(d1,d2,d3)。
// 端口使用了位置连接的方式(input clk, input d,input q)
my_dff d1(clk,d,a);
my_dff d2(clk,a,b);
my_dff d3(clk,b,q);
endmodule
结果
2.2到1多路复用器:创建一个位宽,2比1的多路复用器。当sel=0时,请选择a。当sel=1时,选择b。
代码:
module top_module(
input a, b, sel,
output out );
assign out = (sel) ? b : a;
endmodule
结果
3.完整加法器:创建一个完整的加法器。一个完整的加法器添加三个位(包括随身行李),并产生一个总和和进行。
代码:
module top_module(
input a, b, cin,
output cout, sum );
assign{cout,sum} = a + b + cin;
endmodule
结果
时序电路
1.D 触发器:D 触发器是一个电路,存储 1bit 数据,并定期地根据触发器的输入(d)更新这 1 bit 数据,更新通常发生在时钟上升沿(clk)。存储的数据会通过输出管脚(q)输出。
代码:
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
结果
2.D翻转:D翻转是存储一点的电路,并定期更新,在时钟信号的(通常)正边缘。D拖鞋由逻辑合成器创建,当使用时钟总是块(参见总是块2O).D翻转是"组合逻辑的斑点,然后是翻转’的最简单形式,其中组合逻辑部分只是一根线。创建单个D翻转。
代码
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
结果