采用(yòng)變(biàn)量(liàng)計(jì)數法的(de)計(jì)數狀态機(jī)实現(xiàn)與(yǔ)仿真(zhēn)
狀态機(jī)練習2中(zhōng),需要(yào)在(zài)狀态S1和(hé)狀态2中(zhōng)進(jìn)行計(jì)數实現(xiàn)狀态轉(zhuǎn)移,顯然这(zhè)两(liǎng)个(gè)狀态下(xià)的(de)計(jì)數不(bù)会(huì)重(zhòng)疊使用(yòng),也(yě)就(jiù)是(shì)可(kě)以(yǐ)采用(yòng)一(yī)个(gè)計(jì)數器来(lái)实現(xiàn),但两(liǎng)種(zhǒng)狀态下(xià)的(de)計(jì)數值卻不(bù)一(yī)樣(yàng),容易想(xiǎng)到(dào)明(míng)德揚計(jì)數器方(fāng)案(àn)中(zhōng)的(de)變(biàn)量(liàng)設計(jì)方(fāng)法,我(wǒ)采用(yòng)了(le)这(zhè)樣(yàng)方(fāng)法,并進(jìn)行仿真(zhēn)验(yàn)證,效果(guǒ)一(yī)致(zhì),也(yě)保證了(le)代(dài)碼的(de)一(yī)致(zhì)性(xìng)!原計(jì)數器代(dài)碼略。修改後(hòu)代(dài)碼为(wèi):
always@(*)begin
if(!rst_n)begin
x = 0;
end
else if(state_c ==S1)begin
x = 5;
end
else if(state_c == S2)begin
x = 7;
end
else begin
x = 0;
end
end
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= 0;
end
else if(add_cnt)begin
if(end_cnt)
cnt <= 0;
else
cnt <= cnt + 1'b1;
end
end
assign add_cnt = en && (state_c == S1 || state_c == S2);
assign end_cnt = add_cnt && cnt== x-1;
仿真(zhēn)效果(guǒ)如(rú)下(xià)图(tú):
D:\AA_my_design\MDY_exercise\dianbo\state_machine\exercise2\img\wave.bmp








