计算机体系结构:指令系统与CISC/RISC比较

需积分: 50 38 下载量 9 浏览量 更新于2024-08-07 收藏 857KB PDF 举报
"这篇资料涵盖了计算机体系结构和指令系统的基础知识,主要讨论了指令系统设计的关键要素、RISC和CISC的区别以及计算机体系结构的重要概念。" 在计算机领域,指令系统是计算机硬件与软件之间的重要接口,它定义了计算机能够理解和执行的操作。设计一个有效的指令系统包括四个主要方面:寻址方式设计、指令集功能设计、操作数表示和数据类型以及指令系统编码设计。寻址方式决定了数据如何被定位,而指令集功能则关乎计算机能执行哪些操作。操作数表示和数据类型涉及如何存储和处理不同类型的数据。编码设计则关注如何高效地用二进制代码表示各种指令。 RISC(精简指令集计算机)和CISC(复杂指令集计算机)是两种不同的指令集架构。RISC强调简洁和高效,通常包含高频使用的少量指令,并且设计时考虑了对操作系统和高级语言的支持。相比之下,CISC指令集庞大,包含许多复杂的指令,可能导致控制器硬件复杂,执行速度较慢,且不利于流水线优化。 指令系统应具备完整性、规整性、正交性和高效率。完整性意味着指令集应足以解决任何问题;规整性涵盖对称性和均匀性,确保所有操作平等对待;正交性指指令的不同字段相互独立;高效率则要求指令执行速度快且常用。 高级体系结构方面,微处理器技术的进步推动了计算机设计的创新和发展,强调了体系结构与技术改进的结合。计算机系统的关键特性,如服务器,注重可用性、可扩展性和吞吐能力。响应时间和吞吐量是衡量系统性能的重要指标,前者关注单个事件的完成时间,后者关注系统在单位时间内能处理的工作量。 冯诺依曼结构,即存储程序计算机,以运算器为核心,通过地址线线性编址访问存储器,指令由操作码和地址码组成,数据以二进制表示。程序的局部性原理指出,程序倾向于重复使用近期和附近的指令和数据,分为时间局部性和空间局部性,这在缓存设计中具有重要意义,有助于提高内存访问效率。 这些知识点是计算机科学的基础,对于理解计算机的工作原理和优化系统性能至关重要。无论是设计新的处理器、编写高效的代码还是分析系统性能,都需要深入理解这些概念。

解释这段代码static void chassis_control_loop(chassis_move_t *chassis_move_control_loop) { fp32 max_vector = 0.0f, vector_rate = 0.0f; fp32 temp = 0.0f; fp32 wheel_speed[4] = {0.0f, 0.0f, 0.0f, 0.0f}; uint8_t i = 0; float position_error, speed_error; float position_output, speed_output; float current_position, current_speed; float target_position, target_speed; chassis_move_control_loop->vx_set=vx_set; chassis_move_control_loop->vy_set=vy_set; chassis_move_control_loop->wz_set=angle_set; chassis_vector_to_mecanum_wheel_speed(chassis_move_control_loop->vx_set, chassis_move_control_loop->vy_set, chassis_move_control_loop->wz_set, wheel_speed); if (chassis_move_control_loop->chassis_mode == CHASSIS_VECTOR_RAW) { for (i = 0; i < 4; i++) { chassis_move_control_loop->motor_chassis[i].give_current = (int16_t)(wheel_speed[i]); } } for (i = 0; i < 4; i++) { chassis_move_control_loop->motor_chassis[i].speed_set = wheel_speed[i]; temp = fabs(chassis_move_control_loop->motor_chassis[i].speed_set); if (max_vector < temp) { max_vector = temp; } } if (max_vector > MAX_WHEEL_SPEED) { vector_rate = MAX_WHEEL_SPEED / max_vector; for (i = 0; i < 4; i++) { chassis_move_control_loop->motor_chassis[i].speed_set *= vector_rate; } } for (i = 0; i < 4; i++) { PID_Calc(&chassis_move_control_loop->motor_speed_pid[i], chassis_move_control_loop->motor_chassis[i].speed, chassis_move_control_loop->motor_chassis[i].speed_set); } for (i = 0; i < 4; i++) { chassis_move_control_loop->motor_chassis[i].give_current = (int16_t)(chassis_move_control_loop->motor_speed_pid[i].out); } }

2023-03-26 上传