组合电路设计、时序电路设计

本文详细介绍了组合电路的设计,包括8-3编码器的实现,以及8-3优先编码器的工作原理。在时序电路部分,讨论了D触发器、二分频计数器和任意模值计数器的概念,并展示了移位寄存器和序列信号发生器的构造方法,特别是如何生成特定序列。最后,通过实例展示了有限同步状态机在设计顺序脉冲发生器中的应用。
摘要由CSDN通过智能技术生成

组合电路设计

数字编码器

  • 8-3编码器:
    任何时刻只有一个输入有效。

module code_8to3(F,I);
output[2:0] F;
input[7:0] I;
reg[2:0] F;
always@(I)
case(I)
	8'b00000001:F=3'b000;
	8'b00000010:F=3'b001;
	8'b00000100:F=3'b010;
	8'b00001000:F=3'b011;
	8'b00010000:F=3'b100;
	8'b00100000:F=3'b101;
	8'b01000000:F=3'b110;
	8'b10000000:F=3'b111;
	default:F=3'bx;
endcase
endmodule
  • 8-3优先编码器:
    允许多个输入信号同时有效,但是只按其中优先级最高的有效输入信号编码,对级别低的输入信号不予理睬。
    信号低电平有效。


module mux8to3_p(data_out,Ys,Yex,sel,data_in);
output[2:0] data_out;
output Ys,Yex;
input[7:0] data_in;
input sel;
reg[2:0] data_out;
reg Ys,Yex;
always@(data_in or sel)
if(sel) {data_out,Ys,Yex}={3'b111,1'b1,1'b1};
else
	begin
		casex(data_in)
			8'b0???????:{data_out,Ys,Yex}={3'b000,1'b1,1'b0};	//只要出现第一个0,就不管后面的情况了
			8'b10??????:{data_out,Ys,Yex}={3'b001,1'b1,1'b0};
			8'b110?????:{data_out,Ys,Yex}={3'b010,1'b1,1'b0};
			8'b1110????:{data_out,Ys,Yex}={3'b011,1'b1,1'b0};
			8'b11110???:{data_out,Ys,Yex}={3'b100,1'b1,1'b0};
			8'b111110??:{data_out,Ys,Yex}={3'b101,1'b1,1'b0};
			8'b1111110?:{data_out,Ys,Yex}={3'b110,1'b1,1'b0};
			8'b11111110:{data_out,Ys,Yex}={3'b111,1'b0,1'b1};
		endcase
	end
endmodule

时序电路设计

  • D触发器

  • 计数器
    二分频计数器:

    任意模值计数器:
    在这里插入图片描述
  • 移位寄存器
    N位环形寄存器:

  • 序列信号发生器

    m序列相比最大循环长度序列少了一个全零状态。没有连续nbit的0。
    例:产生100111序列的信号发生器
    法1:由移位寄存器构成:

    法2:由计数器构成:



    m序列发生器:

有限同步状态机

两段式描述方式:


例:
设计顺序脉冲发生器,即将高电平脉冲依次分配到不同输出上。保证在每个时钟内只有一路输出上是高电平。
4位顺序脉冲发生器,有四路输出W0W1W2W3,每路输出上高电平脉冲依次出现,输出在1000,0100,0010,0001之间循环。

module state4(OUT,clk);
output[3:0] OUT;
input clk;
reg[3:0] OUT;
reg[1:0] STATE,next_STATE;
always@(STATE)
	case(STATE)
	2'b00:
		begin
		OUT<=4'b1000;
		next_STATE<=2'b01;
		end
	2'b01:
		begin
		OUT<=4'b0100;
		next_STATE<=2'b10;
		end
	2'b10:
		begin
		OUT<=4'b0010;
		next_STATE<=2'b11;
		end
	2'b11:
		begin
		OUT<=4'b0001;
		next_STATE<=2'b00;
		end
	endcase
always@(posedge clk)
	STATE<=next_STATE;
endmodule
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值