2007年11月25日 星期日

1125 輸入一個數n計算出n! 使用結構化

架構與混何模式相同


根據混何模式的ASM圖與架構推導出真值表



根據真值表推導出各個訊號的方程式



執行結果與波形圖




1120 輸入一個數N 計算出N! 混何模式

根據N!所需要使用到的功能與暫存器推導出架構圖,如下圖



根據行為層的動作所推導出來的asm圖

由架構圖與ASM圖可以推導出CU在各個狀態輸出的控制線。

IDEL狀態下:
ready=1; //READY
clrr3=0; //r3çx
ldr3=1;
muxctr4=1; // r4çx
ldr4=1;
aluctrl=6'b001110; //PASS

COMPUTE_1狀態下:
muxctr5=1; //多工器輸出r3bus
ldr5=1; //r5çr3
clrr5=0;
ldr4=0;

COMPUTE_2狀態下:
ldr5=0;
contr3=1; //r3çr3-1
ldr3=0;

COMPUTE_3狀態下:
ldr2=1; //r2çr4
contr3=0;

COMPUTE_4 狀態下:
ldr2=0;
aluctrl=6'b001110; //ALU作輸出0的動作
ldr6=1; //r6ç0

COMPUTE_5狀態下:
ldr6=0; //r6暫存器停止讀入

COMPUTE_6狀態下:
contr5=1; //r5çr5-1
ldr5=0;
muxctr6=0; //多工器輸出r6bus
aluctrl=6'b100100; //ALU做加法動作
ldr6=1; //r6çr6+r2

COMPUTE_7狀態下:
contr5=0;
aluctrl=6'b101010;
muxctr4=0; //多工器輸出r6bus
ldr4=1; //r4çr6

根據架構所修改過後的程式碼:
mux2 #12 mux_r3(x,r3bus,muxctr3,muxctr3_bus);     
counter_register # 12 r3(muxctr3_bus,r3bus,,ldr3,contr3,clrr3,sysclk);
comparator #12 cmp_r3(r3lty,,,r3bus,12'b1);
not inv_r3(r3gey,r3lty);

mux2 #12 mux_r5(r5bus,r3bus,muxctr5,muxctr5_bus);
counter_register #12 r5(muxctr5_bus,r5bus,,ldr5,contr5,clrr5,sysclk);
comparator #12 cmp_r5(r5lty,,,r5bus,12'b1);
not inv_r5(r5gey,r5lty);

mux2 #12 mux_r6(r6bus,12'b0,muxctr6,muxctr6_bus);
alu181 #12 alu(muxctr6_bus,r2bus,aluctrl[5:2],aluctrl[1],aluctrl[0],,alubus,);
enabled_register #12 r6(alubus,r6bus,ldr6,sysclk);
mux2 #12 mux_r4(r6bus,x,muxctr4,muxctr4_bus);
enabled_register #12 r4(muxctr4_bus,r4bus,ldr4,sysclk);
enabled_register #12 r2(r4bus,r2bus,ldr2,sysclk);

簡化後的asm圖





執行結果與波形圖