精华内容
下载资源
问答
  • 怎么逻辑电路玩pong 是的,那是对的人! 惊人。 这个乒乓球游戏是使用jQuery而非Flash或Java创建的! 谁说编码很无聊? 播放规则: “只需将光标移到下面的字段上,即可查看乒乓球拍的运动。 单击以击中球,...

    怎么用逻辑电路玩pong

    jquery 3d pong

    是的,那是对的人! 惊人。 这个乒乓球游戏是使用jQuery而非Flash或Java创建的! 谁说编码很无聊?

    播放规则: “只需将光标移到下面的字段上,即可查看乒乓球拍的运动。 单击以击中球,然后看它会飞向对手。 不要忘记反击,否则您的对手将获得一分。”

    玩jQuery 3d jPong尽情享受!

    jpong with no blocks game by jquery

    资料来源: http : //demo.marcofolio.net/jpong/

    翻译自: https://www.sitepoint.com/jpong-3d-pong-created-jquery/

    怎么用逻辑电路玩pong

    展开全文
  • verilog之组合逻辑电路(附代码)

    千次阅读 2020-12-01 15:43:57
    到目前为止,要想掌握组合逻辑,就请先掌握本文列出的编码器、译码器、数据选择器、加法器等简单的组合逻辑电路。 1.编码器和译码器 刚开始听verilog的时候,估计都听过3-8译码器,但是听过编码器吗? 编码器和译码...

    前言

    刚学前端设计的时候,听到的就是组合逻辑、时序逻辑,很重要!但是究竟有什么用?到底怎么体现,没有多少老师可以明确指出来,当自己看的东西多了,就可以理解了,甚至可以得出自己的范式。

    到目前为止,要想掌握组合逻辑,就请先掌握本文列出的编码器、译码器、数据选择器、加法器等简单的组合逻辑电路。

    1.编码器和译码器

    刚开始听verilog的时候,估计都听过3-8译码器,但是听过编码器吗?

    编码器和译码器可以将不同输入数据变换为不同的输出数据
    编码器的数据输入比编码后的输出位数大,编码器常用来减少数据通道数目;而译码器与之相反。

    1.1 编码器

    编码器把输入信号编写成一个对应的二进制信号,即把2^N个输入信号转化为N位编码输出。还可以分为:普通编码器和优先编码器。

    普通编码器:只能一个一个的输入,如果同时输入两个信号,编码器不能识别;
    优先编码器:如果输入两个信号,对高位优先识别。(联想if-else的优先级)

    1.1.1 8-3普通编码器

    8-3普通编码器功能真值表

    在这里插入图片描述

    设计代码code8_3.v

    module code8_3(
    	I,
    	O
    );
    
    input 	[7:0]	I;
    output 	[2:0]	O;
    reg 		[2:0]	O;
    
    always@(I)
    begin
    	case(I)
    		8'b0000_0001:O = 3'b111;
    		8'b0000_0010:O = 3'b110;
    		8'b0000_0100:O = 3'b101;
    		8'b0000_1000:O = 3'b100;
    		8'b0001_0000:O = 3'b011;
    		8'b0010_0000:O = 3'b010;
    		8'b0100_0000:O = 3'b001;
    		8'b1000_0000:O = 3'b000;
    		default:	O=3'bxxx;
    	endcase
    end
    
    endmodule
    
    

    仿真文件code8_3_tb.v

    `timescale 1ns/1ns
    `define clk_period 20
    
    module code8_3_tb;
    
    reg 	[7:0]	I;
    wire 	[2:0]	O;
    
    reg clk;
    
    code8_3 code8_3_inst(
    	.I(I),
    	.O(O)
    );
    
    initial clk = 1'b1;
    always #`clk_period clk = ~clk;
    
    initial begin
    	
    	I = 8'b0000_0001;
    	#`clk_period;
    	I = 8'b0000_0010;
    	#`clk_period;
    	I = 8'b0000_0100;
    	#`clk_period;
    	I = 8'b0000_1000;
    	#`clk_period;
    	I = 8'b0001_0000;
    	#`clk_period;
    	I = 8'b0010_0000;
    	#`clk_period ;
    	I = 8'b0100_0000;
    	#`clk_period;
    	I = 8'b1000_0000;
    	#`clk_period;
    	I = 8'b0000_0000;
    	#`clk_period;
    	
    	$stop;
    end
    
    endmodule
    

    功能仿真

    在这里插入图片描述

    1.1.1 8-3优先编码器

    详细介绍见:优先级编码器74LS148的电路结构、工作原理及使用方法

    8-3优先编码器功能真值表

    在这里插入图片描述

    上面这个真值表有问题,在网上找到了下面这一个
    在这里插入图片描述

    8-3优先编码器的逻辑符号

    在这里插入图片描述

    设计代码code_8_3.v

    module code_8_3(
    	EI_n,
    	I,
    	Y,
    	GS_n,
    	EO_n
    );
    
    input 			EI_n;
    input 	[7:0]	I;
    output 	[2:0]	Y;
    output 			GS_n;
    output 			EO_n;
    
    
    reg 		[2:0]	Y;
    reg				GS_n;
    reg				EO_n;
    
    always@(EI_n or I)
    begin
    	if(!EI_n)begin
    		if			(~I[7])		begin	Y = 3'd0;EO_n = 1;GS_n = 0;end
    		else if 	(~I[6])		begin	Y = 3'd1;EO_n = 1;GS_n = 0;end
    		else if 	(~I[5])		begin	Y = 3'd2;EO_n = 1;GS_n = 0;end
    		else if 	(~I[4])		begin	Y = 3'd3;EO_n = 1;GS_n = 0;end
    		else if 	(~I[3])		begin	Y = 3'd4;EO_n = 1;GS_n = 0;end
    		else if 	(~I[2])		begin	Y = 3'd5;EO_n = 1;GS_n = 0;end
    		else if 	(~I[1])		begin	Y = 3'd6;EO_n = 1;GS_n = 0;end
    		else if 	(~I[0])		begin	Y = 3'd7;EO_n = 1;GS_n = 0;end
    		else					begin	Y = 3'd7;EO_n = 0;GS_n = 1;end
    	end
    	else 						begin	Y = 3'd7;EO_n = 1;GS_n = 1;end
    end
    
    endmodule
    
    

    仿真文件code_8_3_tb.v

    `timescale 1ns/1ns
    `define clk_period 20
    
    module code_8_3_tb;
    
    reg 				EI_n;
    reg 		[7:0]	I;
    wire 		[2:0]	Y;
    wire 				GS_n;
    wire 				EO_n;
    
    reg 				clk;
    
    code_8_3 code_8_3_inst(
    	.EI_n(EI_n),
    	.I(I),
    	.Y(Y),
    	.GS_n(GS_n),
    	.EO_n(EO_n)
    );
    
    initial clk = 1'b1;
    always #`clk_period clk = ~clk;
    
    initial begin
    	EI_n = 1'b1;
    	I = 8'b1101_1111;
    	#`clk_period;
    	EI_n = 1'b0;
    	
    	I = 8'b1111_1110;
    	#`clk_period;
    	I = 8'b0111_1101;
    	#`clk_period;
    	I = 8'b1010_1010;
    	#`clk_period;
    	I = 8'b1100_1111;
    	#`clk_period;
    	I = 8'b1111_1111;
    	#`clk_period ;
    	I = 8'b1110_0100;
    	#`clk_period;
    	I = 8'b1111_1111;
    	#`clk_period;
    	I = 8'b1110_0100;
    	#`clk_period;
    	I = 8'b1110_0110;
    	#`clk_period;
    	I = 8'b1111_1010;
    	#`clk_period;
    	I = 8'b1111_1100;
    	#`clk_period;
    	$stop;
    end
    
    endmodule
    

    功能仿真

    在这里插入图片描述

    1.2 译码器

    从电路功能上看,译码器和编码器没有实质的差别。
    编码器把输入信号编写成一个对应的二进制信号,即把2^N个输入信号转化为N位编码输出。
    而译码器是把输入的N位二进制信号转换成2^N个代表代码原意的状态信号并输出。

    1.2.1 3-8译码器74LS138逻辑符号

    在这里插入图片描述

    3-8译码器74LS138的功能真值表

    在这里插入图片描述

    设计代码decoder3_8

    module decoder3_8(
    	Y,
    	S,
    	A
    );
    
    output 	[7:0] Y;
    
    input 	[2:0]	S;
    input		[2:0]	A;
    
    reg		[7:0]	Y;
    
    always@(*)
    begin
    	if(S[0] & (S[1]==0) & (S[2]==0))begin
    		case(A)
    			3'b000:Y = 8'b1111_1110;
    			3'b001:Y = 8'b1111_1101;
    			3'b010:Y = 8'b1111_1011;
    			3'b011:Y = 8'b1111_0111;
    			3'b100:Y = 8'b1110_1111;
    			3'b101:Y = 8'b1101_1111;
    			3'b110:Y = 8'b1011_1111;
    			3'b111:Y = 8'b0111_1111;
    			default Y=8'bX; 
    		endcase
    	end
    	else Y = 8'b1111_1111;
    
    end
    
    endmodule
    

    仿真文件decoder3_8_tb.v

    `timescale 1ns/1ns
    
    module decoder3_8_tb;
    
    wire 		[7:0] Y;
    reg 		[2:0]	S;
    reg			[2:0]	A;
    
    decoder3_8 decoder3_8_tb(
    	.Y(Y),
    	.S(S),
    	.A(A)
    );
    
    initial begin
    	A = 3'b000;
    	S = 3'b000;	
    	
    	#20;
    	A = 3'b001;
    	S = 3'b010;	
    	
    	#20;
    	A = 3'b000;
    	S = 3'b001;	
    	
    	#20;
    	
    	A = 3'b001;
    	#20;
    	A = 3'b010;
    	#20;
    	A = 3'b011;
    	#20;
    	A = 3'b100;
    	#20 ;
    	A = 3'b101;
    	#20;
    	A = 3'b110;
    	#20;
    	A = 3'b111;
    	#20;
    	A = 3'b000;
    	#20;
    	
    	$stop;
    end
    endmodule
    

    功能仿真

    在做前面几个仿真文件时,出现了时钟,到这里突然意识到,组合逻辑仿真时不必引入时钟,只需要利用延迟就可以得出仿真结果。
    在这里插入图片描述

    1.2.2 显示译码器

    请点击查看译码器和数据选择器

    2.数据选择器

    4选1数据选择器的逻辑符号

    在这里插入图片描述

    4选1数据选择器的功能真值表

    输入S1 输入S0 输出Y
    0 0 D0
    0 1 D1
    1 0 D2
    1 1 D3

    4选1选择器原理图

    在这里插入图片描述

    4选1数据选择器的三种建模方式

    (1)门级建模MUX4_1a.v

    module MUX4_1a(
    	D0,D1,D2,D3,
    	S0,S1,
    	Y
    );
    	input 	D0,D1,D2,D3;
    	input 	S0,S1;
    	
    	output 	Y;
    
    	wire notS0,notS1,Y0,Y1,Y2,Y3,Y4;
    	
    	not	not0(notS0,S0);
    	not 	not1(notS1,S1);
    	
    	and	and0(Y0,notS0,notS1,D0);
    	and	and1(Y1,notS0,S1,D1);
    	and	and2(Y2,S0,notS1,D2);
    	and	and3(Y3,S0,S1,D3);
    	
    	or		or1(Y,Y0,Y1,Y2,Y3);
    	
    endmodule
    

    综合出来的电路

    在这里插入图片描述

    (2)数据流级建模

    assign语句描述出来的MUX4_1c.v

    module MUX4_1b(
    	D0,D1,D2,D3,
    	S0,S1,
    	Y
    );
    	input 	D0,D1,D2,D3;
    	input 	S0,S1;
    	
    	output 	Y;
    
    	assign 	Y = ((D0 & ~S0 & ~S1)|(D1 & ~S0 & S1)|(D2 & S0 & ~S1)|(D3 & S0 & S1));
    	
    endmodule
    

    综合出来的电路

    在这里插入图片描述

    ——条件表达式描述MUX4_1c.v

    module MUX4_1c(
    	D0,D1,D2,D3,
    	S0,S1,
    	Y
    );
    	input 	D0,D1,D2,D3;
    	input 	S0,S1;
    	
    	output 	Y;
    
    	assign Y = S1?(S0?D3:D2):(S0?D1:D0);
    	
    endmodule
    

    综合出来的电路

    在这里插入图片描述

    (3)行为级建模

    ——采用了if-else结构的MUX4_1d.v

    module MUX4_1d(
    	D0,D1,D2,D3,
    	S0,S1,
    	Y
    );
    	input 	D0,D1,D2,D3;
    	input 	S0,S1;
    	
    	output 	Y;
    	reg		Y;
    	
    	//采用了if-else结构
    	always@(D0 or D1 or D2 or D3 or S0 or S1)
    	begin
    		if			({S1,S0}==2'b00)	Y=D0;
    		else if	({S1,S0}==2'b01)	Y=D1;
    		else if	({S1,S0}==2'b10)	Y=D2;
    		else if	({S1,S0}==2'b11)	Y=D3;
    		else								Y=1'bx;
    		
    	end
    	
    endmodule
    

    if-else结构综合出来的电路

    在这里插入图片描述

    ——采用了case语句的MUX4_1e.v

    module MUX4_1e(
    	D0,D1,D2,D3,
    	S0,S1,
    	Y
    );
    	input 	D0,D1,D2,D3;
    	input 	S0,S1;
    	
    	output 	Y;
    	reg		Y;
    	
    	//采用了case结构
    	always@(D0 or D1 or D2 or D3 or S0 or S1)
    	begin
    		case({S1,S0})
    				2'b00:Y=D0;
    				2'b01:Y=D1;
    				2'b10:Y=D2;
    				2'b11:Y=D3;
    			default:		Y=1'bx;
    		endcase	
    	end
    	
    endmodule
    

    case语句综合出来的电路

    在这里插入图片描述
    随着数据选择器的输入增多,if-else和case综合出来的电路差异就很大。这种情况下就推荐使用case语句。

    3.加法器

    加法运算是最基本的运算,简单的乘法、除法、减法和复杂的FFT(快速傅里叶变换)都可以分解为加法运算。
    点击阅读笔记连载 | Day7 【半加器、全加器、16位加法器、16位减法器设计】 【原理及verilog实现、仿真】篇

    3.1半加器

    半加器,就是y=a+b,不考虑进位,如下真值表,a、b表示2个相加的数,y表示和,Co表示结果有没有进位。
    在这里插入图片描述
    从真值表可以得出,y和Co的布尔表达式

    Y   = (~a&b) | (a&~b)
    Co  = a&b
    

    在这里插入图片描述

    设计代码half_adder.v

    module half_adder(
          input a,             //第一个加数a
          input b,             //第二个加数b
          output sum,          //和
          output cout          //位
    );     
    		
        assign sum=a ^ b;     //sum=a⊕b
        assign cout=a & b;	  //cout=ab
    
    endmodule
    

    综合出来的电路图

    在这里插入图片描述

    3.2全加器

    强烈推荐阅读:Verilog全加器
    全加器,就是y=a+b+c_up,要考虑进位,如下真值表,a、b表示2个相加的数,c_up表示低位向本位的进位标志,Co表示计算结果有没有向高位进位
    在这里插入图片描述
    从真值表可以得出,y和Co的布尔表达式

    y = (~a&~b&c_up) | (~a&b&~c_up) | (a&~b&~c_up) | (a&b&c_up)
    Co = (~a&b&c_up) | (a&~b&c_up) | (a&b&~c_up) | (a&b&c_up)
    

    3.3减法器

    减法器,就是y=a-b-c_down,要考虑借位,如下真值表,a、b表示2个相减的数,c_down低位向本位的借位标志,Co表示计算结果有没有向高位借位
    在这里插入图片描述
    从真值表可以得出,y和Co的布尔表达式

    y = (~a&~b&c_down) | (~a&b&~c_down) | (a&~b&~c_down) | (a&b&c_down)
    C0 = (~a&~b&c_down) | (~a&b&~c_down) | (~a&b&c_down) | (a&b&c_down)
    

    3.4级联加法器

    3.5超前进位加法器

    4.乘法器

    4.1 移位相加乘法器

    4.2 并行乘法器

    5.其他组合逻辑

    5.1 基本门电路

    二输入与非门真值表

    输入a 输入b 输出F
    0 0 1
    0 1 1
    1 0 1
    1 1 0

    二输入与非门逻辑符号

    在这里插入图片描述

    数据流级描述二输入与非门

    module nand_2(
    	a,
    	b,
    	F
    );
    
    input 	a;
    input 	b;
    output 	F;
    
    assign F = ~(a&b);
    
    endmodule
    

    在这里插入图片描述

    行为级描述二输入与非门

    module nand_2(
    	a,
    	b,
    	F
    );
    
    input 	a;
    input 	b;
    output 	F;
    reg		F;
    
    always@(a or b)
    begin
    	if( a==1'b1 && b==1'b1)
    		F = 0;	
    	else 
    		F = 1;
    
    end
    
    endmodule
    

    在这里插入图片描述

    5.2 三态门电路

    三态门大多数挂在总线上,以实现不同数字部件之间的数据传输。

    三态门是在普通电路的基础上附加控制电路,从而使得门电路的输出端除了输出高电平、低电平外,还可以出现第三种状态,即高阻状态(或称禁止态)。

    三态门的逻辑符号

    在这里插入图片描述
    din为数据输入端,dout为数据输出端,en为控制输入端。

    三态门的真值表

    数据输入 控制输入端 数据输出
    din en dout
    x 0 z
    0 1 0
    1 1 1

    行为级描述三态门

    module tri_gate(
    	din,
    	en,
    	dout
    );
    input din;
    input en;
    output dout;
    
    reg dout;
    
    always@(din or en)
    begin 
    	if(en) 	
    		dout = din;
    	else 		
    		dout = 1'bz;
    end
    
    endmodule
    
    

    行为级描述综合出来的电路如下:

    在这里插入图片描述

    数据流级描述三态门

    module tri_gate(
    	din,
    	en,
    	dout
    );
    input din;
    input en;
    output dout;
    
    assign dout=en?din:1'bz;
    
    endmodule
    
    

    数据流级描述综合出来的电路如下:

    和上面的一样
    在这里插入图片描述

    展开全文
  • verilog之时序逻辑电路(附代码)

    千次阅读 2020-12-01 17:54:20
    到目前为止,要想掌握组合逻辑,就请先掌握本文列出的计数器、触发器、锁存器、寄存器分频器等简单的组合逻辑电路。 1.触发器 包括RS触发器、JK触发器、D触发器、T触发器。 2.锁存器和寄存器 锁存器的功能同触发器...

    前言

    刚学前端设计的时候,听到的就是组合逻辑、时序逻辑,很重要!但是究竟有什么用?到底怎么体现,没有多少老师可以明确指出来,当自己看的东西多了,就可以理解了,甚至可以得出自己的范式。

    到目前为止,要想掌握组合逻辑,就请先掌握本文列出的计数器、触发器、锁存器、寄存器分频器等简单的组合逻辑电路。

    1.触发器

    包括RS触发器、JK触发器、D触发器、T触发器。

    2.锁存器和寄存器

    锁存器的功能同触发器类似,但也有本质区别:触发器是在有效时钟沿到来时才发生作用,而锁存器是电平敏感的,只要时钟信号有效,锁存器就会起作用

    2.1锁存器

    2.1.1电平敏感的1位数据锁存器

    module latch1(
    	clk,
    	d,
    	q
    );
    	input clk,d;
    	output q;
    	
    	assign q = clk?d:q;
    
    endmodule
    

    综合的电路图如下:

    在这里插入图片描述

    2.1.2带有置位功能和复位功能的电平敏感的1位数据锁存器

    module latch2(
    	clk,load,reset,d,q
    );
    input clk,load,reset,d;
    output q;
    
    assign q = reset?1'b0:(load?1'b1:(clk?d:q));
    
    endmodule
    

    综合得到的电路图如下:

    在这里插入图片描述

    2.2 寄存器

    推荐阅读FPGA应该掌握的小笔记中涉及到的寄存器知识点。

    带有清零功能的8位数据寄存器reg_8.v

    推荐阅读:异步复位清零的一些常识

    module reg_8(
    	out,
    	in,
    	clk,
    	clr
    );
    	output 	[7:0] out;
    	input		[7:0]	in;
    	input				clk;
    	input				clr;
    	reg		[7:0]	out;
    	
    	always@(posedge clk or posedge clr)
    	if(clr)		out <= 0;
    	else			out <= in;
    endmodule
    

    综合得到的电路图如下:

    在这里插入图片描述

    3.移位寄存器

    3.1 8位左移移位寄存器shiftleft_reg.v

    module shiftleft_reg(clk,rst,l_in,s,q);
    	input clk,rst,l_in,s;
    	output 	[7:0]	q;
    	reg		[7:0]	q;
    	always@(posedge clk)
    	begin
    		if(rst)
    			q <= 8'b0;
    		else if(s)
    			q <= {q[6:0],l_in};
    		else 
    			q <= q;
    	end
    
    endmodule
    

    3.2 8位右移移位寄存器

    module shiftright_reg(clk,rst,r_in,s,q);
    	input clk,rst,r_in,s;
    	output 	[7:0]	q;
    	reg		[7:0]	q;
    	always@(posedge clk)
    	begin
    		if(rst)
    			q <= 8'b0;
    		else if(s)
    			q <= {r_in,q[7:1]};
    		else 
    			q <= q;
    	end
    
    endmodule
    

    4.分频器

    5.计数器

    6.其他时序逻辑电路

    6.1同步器

    当一个时序电路的输入由另一个时钟驱动的电路产生或来自一个外部异步电路时,需要用同步器将输入数据与需要的时钟同步。即常用在跨时钟处理!

    简单同步器设计代码Synchronizer.v

    module Synchronizer(
    	clk,
    	data,
    	syn
    );
    
    input 	clk;
    input 	data;
    output	syn;
    reg 		syn;
    
    always@(posedge clk)
    	if(data == 0)
    		syn <= 0;
    	else 
    		syn <=1;
    
    endmodule
    
    

    仿真文件Synchronizer_tb.v

    `timescale 1ns/1ns
    `define clk_period 20
    
    module Synchronizer_tb;
    
    	reg 	clk;
    	reg 	data;
    	wire	syn;
    
    	Synchronizer Synchronizer_inst(
    		clk,
    		data,
    		syn
    	);
    
    	initial clk = 1;
    	always #(`clk_period/2) clk = ~clk;
    
    	initial begin
    		data = 1'b0;
    		#(`clk_period*2+5);
    		data = 1'b1;
    		#(`clk_period*2);
    		data = 1'b0;
    		#(`clk_period*2+6);
    		data = 1'b1;
    		#8;
    		data = 1'b0;
    		#16;
    		data = 1'b1;
    		#(`clk_period);
    		data = 1'b0;
    		#(`clk_period*2);
    		$stop;
    	end
    
    endmodule
    
    

    功能仿真

    在这里插入图片描述

    6.2边沿检测电路

    在这里插入图片描述

    设计代码edge_detect.v

    module edge_detect(
    	clk				,
    	rst_n			,
    	data			,
    	raising_edge	,
    	faling_edge		,
    	double_edge		
    );
    	input		clk				;
    	input		rst_n			;
    	input		data			;
    	output		raising_edge	;
    	output		faling_edge		;
    	output		double_edge		;
    	
    	reg data_reg0,data_reg1;
    
    	always@(posedge clk or negedge rst_n)
    	if(!rst_n)begin
    		data_reg0 <= 1'b0;
    		data_reg1 <= 1'b0;
    	end
    	else begin
    		data_reg0 <= data;
    		data_reg1 <= data_reg0;
    	end
    	
    	assign raising_edge  = ~data_reg1 &&  data_reg0;
    	assign faling_edge   =  data_reg1 && ~data_reg0;
    	assign double_edge   =  data_reg1  ^  data_reg0;
    
    endmodule
    

    仿真文件edge_detect_tb.v

    `timescale 1ns/1ns
    `define clk_period 20
    
    module edge_detect_tb;
    
    	reg		clk				;
    	reg		rst_n				;
    	reg		data				;
    	wire		raising_edge	;
    	wire		faling_edge		;
    	wire		double_edge		;
    
    	edge_detect edge_detect_inst(
    		.clk				(clk				),
    		.rst_n			(rst_n			),
    		.data				(data				),
    		.raising_edge	(raising_edge	),
    		.faling_edge	(faling_edge	),
    		.double_edge	(double_edge	)	
    	);
    
    	initial clk = 1;
    	always #(`clk_period/2) clk = ~clk;
    	
    	initial begin
    		rst_n = 1'b0;
    		#(`clk_period);
    		rst_n = 1'b1;
    	end
    	
    	initial begin
    		data = 1'b0;
    		#(`clk_period+10);
    		data = 1'b1;
    		#(`clk_period*3);
    		data = 1'b0;
    		#(`clk_period-5);
    		data = 1'b1;
    		#(`clk_period*2);
    		data = 1'b0;
    		#(`clk_period*3);
    		$stop;
    	end
    endmodule
    

    功能仿真

    在这里插入图片描述

    展开全文
  • 片选,怎么看时序图,电路原理图

    千次阅读 2010-01-24 21:06:00
    片选:动词,单片机学科词汇,可以理解成选片。很多芯片挂在同一总线上的时候,有一个信号... 片选信号一般是在划分地址空间时,由逻辑电路产生的。在数字电路设计中,一般开路输入管脚呈现为高电平,因此片选信号绝大

    片选:动词,单片机学科词汇,可以理解成选片。很多芯片挂在同一总线上的时候,有一个信号来区别总线上的数据和地址由哪个芯片来处理,这个信号就叫做片选信号CS(chip select)。片选这个词即由此而来,指通过设置跳线,利用与门、或门、非门的组合来决定到底是哪几部分进入工作状态。

      片选信号一般是在划分地址空间时,由逻辑电路产生的。在数字电路设计中,一般开路输入管脚呈现为高电平,因此片选信号绝大多数情况下是一个低电平。

    所谓时序图,可以理解为按照时间顺序进行的图解,在时序图上可以反应出某一时刻各信号的取值情况。时序图可以这样看:按照从上到下,从左到右的顺序,每到一个突变点(从0变为1,或从1变为0)时,记录各信号的值,就可获得一张真值表,进而分析可知其相应的功能。

    对于单片机,看懂时序图的最终目标是要用编程实现时序图的功能,进而得到所需的实际功能。如果时序图真的不容易看懂,可以先找些简单的时序图,再找些现成的程序,对应起来看,这样的话往往事半功倍,更容易理解。单片机中对于液晶(如LCD1602)的控制时序图相对容易,适合初学入门,认真理解是很有好处的!

    读图就是要看懂一个电原理图,即弄清电路由哪几部分组成及它们之间的联系和总的性能(如有可能,还要粗略估算性能指标)。电子电路的主要任务是对信号进行处理,只是处理的方式(如放大、滤波、变换等)及效果不同而已,因此读图时,应以所处理的信号流向为主线,沿信号的主要通路,以基本单元电路为依据,将整个电路分成若干具有独立功能的部分,并进行分析。具体步骤可归纳为:了解用途、找出通路、化整为零、分析功能、统观整体。


    通常主板上为单BIOS芯片,因此CE始终为低电平,也就是一直为选中;

    OE是输出允许,也是低电平时有效,当OE为低电平时,允许数据输出,也就是可以读取芯片中的内容,当OE是高电平时,输出被禁止,无法读取内容;

    WE为编程允许,也是低电平有效,当WE为低电平时可以对芯片进行编程(写入),当WE为高电平时不能对芯片进行编程(我们可将此脚接为高电平,那么芯片就无法写入,无敌锁即是将此脚升为高电平,来保护芯片的.)

    CE chip select

    OE output ready

    WE write

    展开全文
  • 片选:动词,单片机学科词汇,可以理解成选片。很多芯片挂在同一总线上的时候,有一个信号来...片选信号一般是在划分地址空间时,由逻辑电路产生的。在数字电路设计中,一般开路输入管脚呈现为高电平,因此片选信号绝大
  • 电路设计漫谈

    2021-01-20 06:34:00
    做了若干年的电子系统设计。所涉领域有数字通信,数据交换机,模拟电路,芯片设计等等。有些感慨逐渐写出来灌灌水,博大家一笑。...总是疑惑为啥电路图或者逻辑设计一样,怎么出来的性能总比不上原设计。  
  • 算术逻辑单元

    千次阅读 2019-06-10 09:46:43
    ALU arithmetic and logic unit 算术逻辑单元,简称ALU,是计算机的数学大脑,也就是计算机里负责运算的组件,比如把两个...接下来,使用最简单的加法电路,即两个bit相加,bit是0或者1,来看看它是怎么设计与运行的...
  • 将按键电路与I/O引脚结构图连起来,就清晰多了,当GPIO设置为上位输入时,上拉电阻与按键的330欧、220K欧串联,这时IO口所读到的电平就是330欧与220K欧电阻分压的总合,由于这两个电阻阻值过大,因引读出的电压...
  • @_@ <strong>问题补充</strong><br /><div class="quote_title">toostupid 写道</div><div class="quote_div">如果是逻辑电路个人觉得要学,要懂,但不用太精。 毕竟电路是电脑架构的基础,现在电路就挂...
  • 这和电路的设计有密切联系(组合逻辑的延时),我们知道电路器件都是由一定延迟的,所以信号的仿真很重要。如果延迟时间大于时钟,就会导致时序违例,出现逻辑错误。 项目要求300M怎么实现呢? 学习涉及如下: 建立...
  • 锁存器原理/门电路/寄存器

    千次阅读 2020-02-29 11:41:40
    大一小菜鸟还没学过模电数电,对电路的理解过于肤浅,对计算机存储特性的本质也是懵懵懂懂。完B站上这期视频(哔哩哔哩计算机科学速成课06寄存器),感觉自己对计算机的存储原理又有了进一步的理解。 锁存器,门关...
  • 这和电路的设计有密切联系(组合逻辑的延时),我们知道电路器件都是由一定延迟的,所以信号的仿真很重要。如果延迟时间大于时钟,就会导致时序违例,出现逻辑错误。 项目要求300M怎么实现呢? 学习涉及如下: ...
  • 前一阵子,一直在苦恼,那些寄存器啊,锁存器啊,移位寄存器啊那么复杂,要我们怎么看得懂它的设计方法呢?难不成是要顺着那些线路去找,然后写出每一个输出端的逻辑表达式,再从它的原理中理解它的设计方法吗?但是...
  • 小车主要逻辑是检测到黑线 按黑线行走 没有黑线 转到避障模式。 一、底盘 小车的底盘,我是在网上买的现成的。建议想做的朋友,如果动手能力强就自己做个底盘,然后买几个电机和轮子。 二、焊接最小系统 这一块基本...
  • 看看怎么回事?为了稳定运行,你需要一个高于3.6伏的电压,也就是每个电池高于1.2伏。 从图表来碱性电池,可以看出电池正好放电一半,即大约1.1安培小时。那在待机状态下工作约460天,不错?但电池将只消耗...
  • 约束项:数字电路逻辑变量之间的约束关系,称为约束。把不允许出现的对应组合对应的最小项称为约束项。 我们先弄明白了普通的卡诺图构建表达式的方式,再来有约束项的卡诺图的构建方式。这两种也对应着真值表和...
  • 好的,上一小节我们介绍了一些电路的基本知识,并且利用电路的基本知识,在上小节的末尾设计了一个比较简单的加法器,那这个小学生我们主要会来探讨这些加法器应该怎么进行改进,使它执行加法的速度更快,那这个小节...
  • 真正起到控制作用的还是数字逻辑电路。比如一个灯泡加上一个开关,你打开开关后灯泡就会亮,这就是一个最简单的门电路。只是由于计算机里的电路大规模集成了,里面有数亿个晶体管,就让人感觉很抽象。 那么软件是...
  • 一、回流的基本概念 数字电路的原理图中,数字信号的传播是从一个逻辑门向另一个逻辑门,信号通过导线从输出端送到接收端,起来似乎是单向流动的,许多数字工程师因此认为回路通路是不相关的,毕竟,驱动器和接收...
  • L610的初始化过程有些不太清楚,at_device_l610.c文件,是在其中创建了一个初始化的线程并直接调用了,这个怎么能在main中统一初始化呢,现在是在main中延时了10秒等待初始化完成后再执行mqtt等初始化。...
  • Minecraft是一个颠覆性的高自由度游戏,其中文译名叫“我的世界”。之所以会有如此译名,原因在于这个游戏就像一个沙盒世界,玩家就像是个创世神...这个游戏里面是可以制作逻辑电路的,通过简单的搭建,玩家可以制作出
  • 计算机硬件 的 基础 是 逻辑电路逻辑电路 可以说是 计算机硬件 的 基因 ,...我们来看看一个 指令开关 是怎么 设计 和 实现 的 : 指令开关, 就是 在 输入端 输入 指令, 输出端 输出 控制信号 。 我们以 4...
  • 文章目录一、基本运算器1.一位全加器2.无符号8位二进制数加法器3.八位减法器4.定点二进制数的补码加减法运算器二、编码器和译码器1.编码器2....(不知道怎么弄成verilog的高亮,复制粘贴到编译器上面
  • 硬件路由转发原理浅析

    万次阅读 热门讨论 2015-07-18 23:41:07
    我发现我系统没有安装画逻辑电路的工具。那怎么办?这个问题的答案我真真在心里,只是难于言表,于是乎,我采用手绘图手机拍照的方式,展示一下硬件转发表的威力,由于没有实际数据,我采用相对比较的方式,让诸位...
  • 小白CPU 01

    2020-07-26 21:55:30
    那么CPU在数字电路角度,是一个个的门电路组成的,怎么学习CPU的结构,其中的寄存器,计数器等。还有计算机组成中重要的部分存储器,这些都是由数字电路组成,涉及到了组合电路,时序电路,触发器等等。从这个角度...
  • But How Do It Know 存储计算和顺序

    千次阅读 2018-07-04 15:03:36
    **逻辑运算实现的电路原理请深入分析逻辑电路 1.计算机是怎么Remember的? 寄存器个内存 都是与非门。 i是输入的bit,o是输出的bit,s是设置输出能否根据输入改变即该门能否有用的bit。 s=1,i=0,a=1&...
  • 不管怎么样的方式,都反映了我们人类的思维逻辑从简单到复杂,如果一上来就整一个非常复杂的电路,是很容易让人发懵的。 开关电源是一个很常见的电路,原理大家都明白,但是真要是设计出一个具体的电路,或者分析一...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

逻辑电路怎么看