组合电路设计
数字编码器
- 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