ผลต่างระหว่างรุ่นของ "Com sys lab/mockup controls"
Jittat (คุย | มีส่วนร่วม) (หน้าที่ถูกสร้างด้วย ': จาก com sys lab ในส่วนนี้เราจะทดลองเขียนส่วน control unit โด...') |
Jittat (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 2 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 15: | แถว 15: | ||
add $0,$3 | add $0,$3 | ||
sta $4 | sta $4 | ||
+ | |||
+ | สังเกตว่าการบวกและลบจะทำกับ register $0 เท่านั้น คำสั่ง sta และ lda เป็นการนำเข้าไปเก็บหรืออ่านค่าจาก register $0 | ||
+ | |||
+ | == โครงสร้างส่วน data path == | ||
+ | |||
+ | == ทดลองเขียน output ที่ควรเป็น == | ||
+ | |||
+ | สัญญาณผลลัพธ์หลักควรเป็น regw0 (หมายเลข register ที่เขียนค่ากลับ) และ dataw0 (ค่าที่เขียนกลับไปที่ register file) ให้เขียนสัญญาณดังกล่าวตลอดการทำงานของโปรแกรม | ||
+ | |||
+ | == เขียนสัญญาณ control == | ||
+ | |||
+ | สัญญาณที่ต้องเขียนมีทั้งสิ้น 5 เส้น คือ | ||
+ | |||
+ | * reg1 | ||
+ | * regw0 | ||
+ | * reg_write_enabled | ||
+ | * alu_op | ||
+ | * outmux_sel | ||
+ | |||
+ | ให้ดาวน์โหลด [https://theory.cpe.ku.ac.th/~jittat/com-sys-lab/mock/mock.zip mock.zip] ในโค้ดดังกล่าว register_file มีการแก้ไขจากสัปดาห์ก่อน มีการสร้าง component ต่าง ๆ และต่อเชื่อมสายสัญญาณไว้เรียบร้อยแล้ว | ||
+ | |||
+ | จากนั้นให้แก้โค้ดใน sc_main ในส่วนที่เป็นการส่งสัญญาณควบคุมดังกล่าว เพื่อให้ data path ทำงานได้ถูกต้องตามโปรแกรม ในการโปรแกรมให้แก้ในส่วนโค้ดด้านล่าง (มีตัวอย่างการสั่งซึ่งทำงานอะไรบางอย่าง) | ||
+ | |||
+ | <pre> | ||
+ | // control.preprogram(r1, rw0, we, aop, omsel) | ||
+ | |||
+ | control.preprogram(1,2,1,0,0); | ||
+ | control.preprogram(1,3,1,0,0); | ||
+ | control.preprogram(2,0,1,0,1); | ||
+ | control.preprogram(2,3,1,0,0); | ||
+ | </pre> | ||
+ | |||
+ | สัญญาณที่ใส่จะถูกเรียกทำงานไปตามลำดับ |
รุ่นแก้ไขปัจจุบันเมื่อ 01:00, 24 มิถุนายน 2559
- จาก com sys lab
ในส่วนนี้เราจะทดลองเขียนส่วน control unit โดยไม่ได้เขียนจริง แต่ให้จำลองสัญญาที่ control unit จะส่งออกมา (อ่านเพิ่มเติมเกี่ยวกับ instruction set ของ cpu ที่เราจะสร้างได้ที่ Com sys lab/instruction set)
เมื่อทำตามโปรแกรมด้านล่างนี้ ก่อนอื่นให้สมมติว่า register $1 มีค่าเป็น 1
add $0,$1 add $0,$1 sta $2 sub $0,$0 add $0,$1 add $0,$2 sta $3 lda $2 add $0,$3 sta $4
สังเกตว่าการบวกและลบจะทำกับ register $0 เท่านั้น คำสั่ง sta และ lda เป็นการนำเข้าไปเก็บหรืออ่านค่าจาก register $0
โครงสร้างส่วน data path
ทดลองเขียน output ที่ควรเป็น
สัญญาณผลลัพธ์หลักควรเป็น regw0 (หมายเลข register ที่เขียนค่ากลับ) และ dataw0 (ค่าที่เขียนกลับไปที่ register file) ให้เขียนสัญญาณดังกล่าวตลอดการทำงานของโปรแกรม
เขียนสัญญาณ control
สัญญาณที่ต้องเขียนมีทั้งสิ้น 5 เส้น คือ
- reg1
- regw0
- reg_write_enabled
- alu_op
- outmux_sel
ให้ดาวน์โหลด mock.zip ในโค้ดดังกล่าว register_file มีการแก้ไขจากสัปดาห์ก่อน มีการสร้าง component ต่าง ๆ และต่อเชื่อมสายสัญญาณไว้เรียบร้อยแล้ว
จากนั้นให้แก้โค้ดใน sc_main ในส่วนที่เป็นการส่งสัญญาณควบคุมดังกล่าว เพื่อให้ data path ทำงานได้ถูกต้องตามโปรแกรม ในการโปรแกรมให้แก้ในส่วนโค้ดด้านล่าง (มีตัวอย่างการสั่งซึ่งทำงานอะไรบางอย่าง)
// control.preprogram(r1, rw0, we, aop, omsel) control.preprogram(1,2,1,0,0); control.preprogram(1,3,1,0,0); control.preprogram(2,0,1,0,1); control.preprogram(2,3,1,0,0);
สัญญาณที่ใส่จะถูกเรียกทำงานไปตามลำดับ