单周期CPU设计(二)取指模块(minisys)(verilog)(vivado)

`timescale 1ns / 1ps
//
module Ifetc32 (input			reset,				// 复位信号(高电平有效)input			clock,				// 时钟(23MHz)output	[31:0]	Instruction,		// 输出指令到其他模块output	[31:0]	PC_plus_4_out,		// (pc+4)送执行单元input	[31:0]	Add_result,			// 来自执行单元,算出的跳转地址input	[31:0]	Read_data_1,		// 来自译码单元,jr指令用的地址input			Branch,				// 来自控制单元input			nBranch,			// 来自控制单元input			Jmp,				// 来自控制单元input			Jal,				// 来自控制单元input			Jrn,				// 来自控制单元input			Zero,				// 来自执行单元output	[31:0]	opcplus4,			// JAL指令专用的PC+4// ROM Pinoutsoutput	[13:0]	rom_adr_o,			// 给程序ROM单元的取指地址input	[31:0]	Jpadr				// 从程序ROM单元中获取的指令
);wire [31:0] PC_plus_4;reg [31:0] PC;reg [31:0] next_PC;		// 下条指令的PC(不一定是PC+4)reg [31:0] opcplus4;// ROM Pinoutsassign rom_adr_o = PC[15:2];assign Instruction = Jpadr;assign PC_plus_4[31:2] = PC[31:2] + 4;
assign PC_plus_4[1:0] = 2'b00;
assign PC_plus_4_out = PC_plus_4[31:0];always @* begin  // beq $n ,$m if $n=$m branch   bne if $n /=$m branch jrif (Branch && Zero) beginnext_PC = PC + Add_result;end else if (nBranch && !Zero) beginnext_PC = PC + Add_result;end else if (Jrn) beginnext_PC = Read_data_1;end else beginnext_PC = PC_plus_4;endend// 请考虑以上三条指令的判断条件,// 以及三条指令的执行该给next_PC赋什么值always @(negedge clock) beginif (reset) beginPC <= 32'h00000000;opcplus4 <= 32'h00000000;end else beginPC <= next_PC;if (Jal) beginopcplus4 <= PC + 4;end else beginopcplus4 <= 32'h00000000;endendendendmodule

仿真代码如下

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date:  
// Design Name: 
// Module Name: ifetc32_sim
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module ifetc32_sim ();// inputreg[31:0]  Add_result = 32'h00000000;reg[31:0]  Read_data_1 = 32'h00000000;reg        Branch = 1'b0;reg        nBranch = 1'b0;reg        Jmp = 1'b0;reg        Jal = 1'b0;reg        Jrn = 1'b0;reg        Zero = 1'b0;reg        clock = 1'b0,reset = 1'b1;// outputwire [31:0] Instruction;            // 输出指令wire [31:0] PC_plus_4_out;wire [31:0] opcplus4;wire [13:0] rom_adr;wire [31:0] Jpadr;Ifetc32 Uif (.reset			(reset),			// 复位(高电平有效).clock			(clock),			// CPU时钟.Instruction	(Instruction),		// 输出指令到其他模块.PC_plus_4_out	(PC_plus_4_out),	// (pc+4)送执行单元.Add_result		(Add_result),		// 来自执行单元,算出的跳转地址.Read_data_1	(Read_data_1),		// 来自译码单元,jr指令用的地址.Branch			(Branch),			// 来自控制单元.nBranch		(nBranch),			// 来自控制单元.Jmp			(Jmp),				// 来自控制单元.Jal			(Jal),				// 来自控制单元.Jrn			(Jrn),				// 来自控制单元.Zero			(Zero),				// 来自执行单元.opcplus4		(opcplus4),			// JAL指令专用的PC+4// ROM Pinouts.rom_adr_o		(rom_adr),			// 给程序ROM单元的取指地址.Jpadr			(Jpadr)				// 从程序ROM单元中获取的指令);// 分配64KB ROM, 编译器实际只用 64KB ROMprgrom instmem (.clka	(clock),.wea	(0),.addra	(rom_adr),.dina	(0),.douta	(Jpadr));initial begin#100   reset = 1'b0;#100   Jal = 1;#100   begin Jrn = 1;Jal = 0; Read_data_1 = 32'h0000019c;end;#100   begin Jrn = 0;Branch = 1'b1; Zero = 1'b1; Add_result = 32'h00000020;end;        #100   begin Branch = 1'b0; Zero = 1'b0; end;        endalways #50 clock = ~clock;
endmodule

仿真波形图如下

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/873536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于STC8H4K64TL单片机的触摸功能和数码管驱动功能实现一个触摸按键单击长按都增加数值另一个触摸按键单击长按都减少数值应用

基于STC8H4K64TL单片机的触摸功能和数码管驱动功能实现一个触摸按键单击长按都增加数值另一个触摸按键单击长按都减少数值应用 STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单…

【学习css3】使用flex和grid实现等高元素布局

过往的实现方法是使用浮动加计算布局来实现&#xff0c;当flex和grid问世时&#xff0c;这一切将变得简单起来 一、简单的两列实现 1、先看页面效果 2、css代码 .container {padding: 10px;width: 100ch;margin: 0 auto;box-shadow: inset 0 0 0 2px #ccc;}.column {margin: 2…

【linux】kernel-trace

文章目录 linux kernel trace配置trace内核配置trace接口使用通用配置Events配置Function配置Function graph配置Stack trace设置 跟踪器tracer功能描述 使用示例1.irqsoff2.preemptoff3.preemptirqsoff linux kernel trace 配置 源码路径&#xff1a; kernel/trace trace内…

[Redis]典型应用——分布式锁

什么是分布式锁&#xff1f; 在一个分布式系统中&#xff0c;也会涉及到多个节点访问同一个公共资源的情况。此时就需要通过锁来做互斥控制&#xff0c;避免出现类似于"线程安全"的问题 举个例子&#xff0c;在平时抢票时&#xff0c;多个用户可能会同时买票&#…

大语言模型-文本向量模型评估基准 MTEB

MTEB&#xff08;Massive Text Embedding Benchmark&#xff09; 涵盖112种语言的58个数据集&#xff0c;包含如下8种任务。 1、双语文本挖掘&#xff08;Bitext Mining&#xff09; 任务目标&#xff1a; 在双语语料库中识别语义等价的句子对。 任务描述&#xff1a; 输入…

Nature子刊 | ATAC-seq、RNA-seq和蛋白组联合分析揭示脂质激活转录因子PPARα在肾脏代偿性肥大的作用机制

2023年6月&#xff0c;美国国立心肺血液研究所的研究团队在Nature Communications上发表题为“Signaling mechanisms in renal compensatory hypertrophy revealed by multi-omics”的文章&#xff0c;该研究通过在单侧肾切除的小鼠模型中使用多组学方法&#xff08;蛋白质组学…

深入浅出WebRTC—NACK

WebRTC 中的 NACK&#xff08;Negative Acknowledgment&#xff09;机制是实时通信中处理网络丢包的关键组件。网络丢包是常见的现象&#xff0c;尤其是在无线网络或不稳定连接中。NACK 机制旨在通过请求重传丢失的数据包来减少这种影响&#xff0c;从而保持通信的连续性和质量…

Open3D 非线性最小二乘法拟合空间球

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键代码 2.1.1定义残差函数 2.1.2拟合球面 2.2完整代码 三、实现效果 3.1原始点云 3.2拟合后点云 3.3结果数据 前期试读&#xff0c;后续会将博客加入下列链接的专栏&#xff0c;欢迎订阅 Open3D点云算法与点…

spark 动态资源分配dynamicAllocation

动态资源分配&#xff0c;主要是spark在运行中可以相对合理的分配资源。 初始申请的资源远超实际需要&#xff0c;减少executor初始申请的资源比实际需要少很多&#xff0c;增多executorSpark运行多个job&#xff0c;这些job所需资源有的多有的少&#xff0c;动态调整executor…

GPT-4o 与 GPT-4o Mini:两者的区别和特点

在人工智能领域&#xff0c;OpenAI 的 GPT 系列模型一直处于技术前沿。最近&#xff0c;OpenAI 发布了两个版本的模型&#xff1a;GPT-4o 和 GPT-4o Mini。这两个模型虽然都属于 GPT-4 系列&#xff0c;但在应用和性能上有一些显著的差异。本文将深入探讨这两个模型的不同之处。…

Automation Anywhere推出新一代AI+自动化企业系统,助力企业实现10倍商业增长

RPA厂商纷纷进军AI Agent ( AI 代理)领域&#xff0c;陆续推出创新产品。最近&#xff0c;Automation Anywhere宣布推出其新的AI 自动化企业系统&#xff0c;该系统结合AI和自动化技术&#xff0c;以实现指数级的业务成果。 在Imagine 2024大会上首次亮相的这款新产品&#xf…

前端实现视频播放添加水印

一、效果如下 二、代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body><style>.container {position: relative;}.base {width: 300px;hei…

鸿蒙开发StableDiffusion绘画应用

Stable Diffusion AI绘画 基于鸿蒙开发的Stable Diffusion应用。 Stable Diffusion Server后端代码 Stable Diffusion 鸿蒙应用代码 AI绘画 ​ 使用Axios发送post网络请求访问AI绘画服务器 api &#xff0c;支持生成图片保存到手机相册。后端服务是基于flaskStable Diffusion …

ACM中国图灵大会专题 | 图灵奖得主Manuel Blum教授与仓颉团队交流 | 华为论坛:面向全场景应用编程语言精彩回顾

ACM 中国图灵大会&#xff08;ACM Turing Award Celebration Conference TURC 2024&#xff09;于2024年7月5日至7日在长沙举行。本届大会由ACM主办&#xff0c;in cooperation with CCF&#xff0c;互联网之父Vinton Cerf、中国计算机学会前理事长梅宏院士和廖湘科院士担任学术…

移动端如何离线使用GPT

在移动端离线使用GPT&#xff0c;只需要一个app&#xff1a;H2O AI Personal GPT 是H2OAI上架的一款app&#xff0c;可离线使用&#xff0c;注重数据隐私&#xff0c;所有数据都只存储在本地。对H2OAI感兴趣的伙伴&#xff0c;可移步&#xff1a;https://h2o.ai 该app支持的模…

Intel和AMD用户再等等!微软确认Win11 24H2年底前登陆

微软近日确认&#xff0c;Windows 11 24H2版本将于2024年底前正式登陆使用英特尔和AMD处理器的PC。 根据微软介绍&#xff0c;Windows 11 24H2将作为传统功能更新&#xff0c;将在今年晚些时候提供给所有设备。 此前&#xff0c;微软已向搭载骁龙X Plus和X Elite系列处理器的Co…

作为爬虫工程师,在封装API时如何做得更好

在数据驱动的时代&#xff0c;爬虫工程师的角色日益重要。他们不仅是数据的收集者&#xff0c;更是数据的桥梁构建者&#xff0c;通过编写高效、稳定的爬虫程序&#xff0c;将互联网上的海量信息转化为有价值的数据集。而在这一过程中&#xff0c;API&#xff08;应用程序接口&…

esp8266模块(1)

1WiFi的两种模式 1AP模式&#xff1a;ESP8266模块充当一个无线接入点&#xff0c;类似于一个路由器。&#xff08;如手机开热点&#xff09; 2Station模式&#xff08;sta&#xff09;&#xff1a;ESP8266模块作为客户端连接到一个现有的WiFi网络。&#xff08;如路由器&#…

阿里云服务器 篇五:短链服务网站

文章目录 系列文章YOURLS安装步骤更新服务器安装Apache Web服务器安装MySQL安装PHP 8.3和必要的PHP 8.3扩展安装YOURLS使用YOURLS基本用法关于错误消息"Could not auto-encrypt passwords"改为中文语言提供公共使用页面当短链无效时,进行错误提示YOURLS 的 Bookmark…

主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning

一文搞清楚LORA、Prompt Tuning、P-Tuning、Adapter 、Prefix等大模型微调方法 大模型主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning 并训练自己的数据集 五万字综述&#xff01;Prompt-Tuning&#xff1a;深度解读一种新的微调范式