nju实验六 移位寄存器及桶形移位器

news/2025/11/21 21:28:02/文章来源:https://www.cnblogs.com/mo686/p/19254547

实验六 移位寄存器及桶形移位器

算术移位和逻辑移位寄存器

module shift_register_8bit (input clk,              // 时钟信号input rst,              // 异步复位input [2:0] mode,       // 工作模式选择input [7:0] data_in,    // 并行输入数据(用于置数模式)input serial_in,        // 串行输入数据input shift_in,         // 移位输入(用于算术/逻辑移位)output reg [7:0] data_out // 并行输出
);// 寄存器核心reg [7:0] reg_data;always @(posedge clk or posedge rst) beginif (rst) beginreg_data <= 8'b0;  // 异步复位end else begincase(mode)3'b000: reg_data <= 8'b0;          // 清零3'b001: reg_data <= data_in;       // 置数3'b010: reg_data <= {shift_in, reg_data[7:1]}; // 逻辑右移3'b011: reg_data <= {reg_data[6:0], shift_in}; // 逻辑左移3'b100: reg_data <= {reg_data[7], reg_data[7:1]}; // 算术右移3'b101: reg_data <= {reg_data[6:0], serial_in}; // 左端串行输入3'b110: reg_data <= {reg_data[0], reg_data[7:1]}; // 循环右移3'b111: reg_data <= {reg_data[6:0], reg_data[7]}; // 循环左移default: reg_data <= reg_data;     // 保持endcaseendend// 并行输出always @(*) begindata_out = reg_data;endendmodule

RV32I指令集的32位移位

module shifter_32 (input [31:0] data_in,    // 输入数据input [4:0]  shamt,      // 移位位数input [1:0]  shift_op,   // 移位类型: 00=SLL, 01=SRL, 10=SRAoutput [31:0] data_out   // 移位结果
);reg [31:0] shifted;always @(*) begincase(shift_op)2'b00: shifted = data_in << shamt;       // SLL2'b01: shifted = data_in >> shamt;       // SRL2'b10: shifted = $signed(data_in) >>> shamt; // SRAdefault: shifted = data_in;              // 无移位endcaseendassign data_out = shifted;
endmodule

8位LFSR伪随机数发生器

.

├── constr
│ └── top.nxdc
├── csrc
│ └── test_our.cpp
├── Makefile
├── vsrc
│ └── top.v
├── top.v
├── vlt_dump.vcd
├── test_our.cpp
├── obj_dir
└── dump.vcd

├── constr

└── top.nxdc

top=topbutton BTNLrst_n BTNCleds (LD7, LD6, LD5, LD4, LD3, LD2, LD1, LD0)
hex0 (SEG0A, SEG0B, SEG0C, SEG0D, SEG0E, SEG0F, SEG0G, DEC0P)
hex1 (SEG1A, SEG1B, SEG1C, SEG1D, SEG1E, SEG1F, SEG1G, DEC1P)

├── csrc

└── test_our.cpp

#include<nvboard.h>
#include<Vtop.h>static TOP_NAME dut;void nvboard_bind_all_pins(TOP_NAME* top);static void single_cycle(){dut.eval();
}int main(){nvboard_bind_all_pins(&dut);nvboard_init();while(1){nvboard_update();single_cycle();}}

├── test_our.cpp

#include "verilated.h"
#include "verilated_vcd_c.h"
#include "obj_dir/Vtop.h"VerilatedContext* contextp = NULL;
VerilatedVcdC* tfp = NULL;#define MAX_SIM_TIME 20
int sim_time = 0;static Vtop* top;void step_and_dump_wave(){top->eval();contextp->timeInc(1);tfp->dump(contextp->time());
}
void sim_init(){contextp = new VerilatedContext;tfp = new VerilatedVcdC;top = new Vtop;contextp->traceEverOn(true);top->trace(tfp, 0);tfp->open("dump.vcd");
}void sim_exit(){step_and_dump_wave();tfp->close();
}int main() {sim_init();while (sim_time < MAX_SIM_TIME) {top->button ^=1;step_and_dump_wave();sim_time ++;} sim_exit();
}

├── vsrc

└── top.v

module top (input button,           // KEY0按钮输入input rst_n,            // 复位信号(低电平有效)output [7:0] hex0,      // 低位七段数码管(直接输出编码)output [7:0] hex1,      // 高位七段数码管output [7:0] leds       // LED显示当前状态
);// 8位LFSR寄存器(初始种子为00000001)reg [7:0] lfsr = 8'b00000001;// 反馈位计算:x4 XOR x3 XOR x2 XOR x0wire feedback = lfsr[4] ^ lfsr[3] ^ lfsr[2] ^ lfsr[0];// LFSR更新逻辑always @(negedge button or posedge rst_n) beginif (rst_n) lfsr <= 8'b00000001;else beginlfsr <= {feedback, lfsr[7:1]};  // 右移并插入反馈位if (lfsr == 8'b0) lfsr <= 8'b00000001; // 防全零锁定endend// 数码管显示模块(根据您提供的编码表)seg7_decoder seg0 (.bin(lfsr[3:0]), .seg(hex0));seg7_decoder seg1 (.bin(lfsr[7:4]), .seg(hex1));// LED显示当前状态assign leds = lfsr;endmodule// 根据您提供的编码表实现的七段译码器
module seg7_decoder (input [3:0] bin,output reg [7:0] seg
);
always @(*) begincase(bin)4'h0: seg = 8'b00000011; // 04'h1: seg = 8'b10011111; // 14'h2: seg = 8'b00100101; // 24'h3: seg = 8'b00001101; // 34'h4: seg = 8'b10011001; // 44'h5: seg = 8'b01001001; // 54'h6: seg = 8'b01000001; // 64'h7: seg = 8'b00011111; // 74'h8: seg = 8'b00000001; // 84'h9: seg = 8'b00001001; // 94'hA: seg = 8'b00010001; // A(自定义)4'hB: seg = 8'b11000001; // B(自定义)4'hC: seg = 8'b01100011; // C(自定义)4'hD: seg = 8'b10000101; // D(自定义)4'hE: seg = 8'b01100001; // E(自定义)4'hF: seg = 8'b01110001; // F(自定义)default: seg = 8'b11111111; // 全灭endcase
end
endmodule

├── top.v

module top (input button,           // KEY0按钮输入output [7:0] leds       // LED显示当前状态
);// 8位LFSR寄存器(初始种子为00000001)reg [7:0] lfsr = 8'b00000001;// 反馈位计算:x4 XOR x3 XOR x2 XOR x0wire feedback = lfsr[4] ^ lfsr[3] ^ lfsr[2] ^ lfsr[0];// LFSR更新逻辑always @(negedge button ) beginlfsr <= {feedback, lfsr[7:1]};  // 右移并插入反馈位if (lfsr == 8'b0) lfsr <= 8'b00000001; // 防全零锁定end// LED显示当前状态assign leds = lfsr;endmodule

波形仿真

(1)编译
verilator -Wall --trace -cc top.v --exe main.cpp
(2)生成可执行文件make -C obj_dir -f Vtop.mk Vtop
(3)生成波形
./obj_dir/Vtop
(4)查看波形
gtkwave dump.vcd

image

接入NVBoard

make
cd build
./top

效果

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

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

相关文章

P6727 [COCI 2015/2016 #5] OOP

题目给出字符串按 * 断开得到前后两段 \(P,S\),即要求满足一下条件的模式串个数:具有前缀 \(P\),后缀 \(S\)。\(|P|+|S|\le siz\)。

c语言和python如何解决文本文件中“不同平台换行符不兼容”问题

在 C 语言和 Python 中解决不同平台换行符不兼容的核心思路一致:统一换行符标准(推荐使用 \n),或在读写时适配目标平台。以下是具体实现方案: 一、核心背景:不同平台的换行符差异平台 换行符 说明Unix/Linux \n …

智能制造(MOM)-详细设计 - 智慧园区

数字化智能制造成熟度框架 数字化智能工厂应用架构 数字化智能工厂技术架构 数字化智能工厂制造体系 未来数字化智能工厂愿景 价值驱动的数字化智能工厂指标 关键环节解决方案 端到端闭环的运营协同 产品BOPIMBOM数据流…

完整教程:政务系统信创改造中,金仓日志如何满足等保2.0三级审计要求

完整教程:政务系统信创改造中,金仓日志如何满足等保2.0三级审计要求2025-11-21 21:12 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

基于 Erlang 的英文数字验证码识别系统设计与实现

一、引言 验证码(CAPTCHA)作为互联网中抵御自动化攻击的重要安全机制,被广泛用于登录验证、注册防刷、评论防机器人等场景。 传统验证码识别常用 Python 或 C++ 实现,而本文将介绍如何用 Erlang 来构建一个基础的英…

如何使用IDM嗅探视频并下载?

用 IDM 嗅探下载网页视频,优先用浏览器浮窗一键下载;浮窗不出现则补全插件/格式、手动抓直链或用站点抓取;加密/分离流需先合并,全程遵守版权与站点规则。🎬前置准备(必做)安装官方最新 IDM,激活并重启;安装…

洛谷 B4409:[GESP202509 一级] 商店折扣 ← 模拟算法

​【题目来源】https://www.luogu.com.cn/problem/B4409【题目描述】商店正在开展促销活动,给出了两种方案的折扣优惠。第一种方案是购物满 x 元减 y 元;第二种方案是直接打 n 折,也就是说价格变为原先的 n/10。这里…

java数据结构--LinkedList与链表 - 教程

java数据结构--LinkedList与链表 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

STM32中断、NVIC、EXTI

一、如何提高程序的实时性 轮询式系统 指的是在程序运行时,首先对所有的硬件进行初始化,然后在主程序中写一个死循环,需要运行的功能按照顺序进行执行,轮询系统是一种简单可靠的方式,一般适用于在只需要按照顺序执…

深入解析:自动化文件管理:分类、重命名和备份

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

nju实验三 加法器与ALU

加法是数字系统中最常执行的运算,加法器是ALU(算术逻辑部件 Arithmetic-Logic Unit )的核心部件。 减法可以看作是被减数与取负后的减数进行加法。即用加法器同时实现加法和减法两种运算。乘法也可以利用移位相加的…

信息论(八):吉布斯不等式的证明

吉布斯不等式的证明,我们要证明: $ D_{\text{KL}}(P | Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)} \geq 0 $ 等号成立当且仅当对于所有 $ x,P(x) = Q(x)$。 步骤 1:对数的一个关键性质,我们使用以下不等式: $ \ln …

题解:AT_agc028_e [AGC028E] High Elements

题意:给出一个序列,要求把这个序列分成两个序列,要求这两个序列的前缀极大值的个数相同,给出字典序最小的构造。 做法: 首先肯定是逐位确定,那么假设第一个序列目前有 \(a\) 个最大值,第二个序列有 \(b\)。注意…

pyppeteer: 得到当前运行中的浏览器

一,代码: import requests from requests.exceptions import HTTPError from pyppeteer.launcher import connectdef get_debugger_url():url = "http://localhost:9222/json/version"try:resp = requests…

AI救星!8个写毕业论文的实用AI工具大揭秘

2025年11月21日,作者临近毕业论文开题答辩却毫无头绪,听到同学推荐AI写论文工具后,试用了8个实用AI工具并分享经验。包括AI论文智作、QuillBot、巨鲸写作等,这些工具各有特点,如大多能30分钟生成5万字初稿,覆盖多…

数据血缘图在数据错误追溯中的应用指南

数据血缘图在数据错误追溯中的应用指南 当终端用户发现数据报告或仪表板中存在错误数据时,架构师可以利用数据血缘图进行系统化的“逆向工程”,快速定位故障的系统、转换过程和时间点。 1. 架构师追溯错误的三维定位…

Luogu P10778 BZOJ3569 DZY Loves Chinese II 题解 [ 紫 ] [ Xor Hashing ] [ 线性基 ] [ DFS 树 ]

DZY Loves Chinese II 一道喵喵哈希题。 对于连通性问题,可以考虑对原图建出 DFS 树,然后对于不同的边采取不同的处理方式。在本题中,如果需要把原图割开,那么至少需要存在一条树边,使得经过它的非树边全都被割开…

CSS基础语法 - 指南

CSS基础语法 - 指南2025-11-21 20:24 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

MineContext:我第一次感觉 AI 真正在“主动帮我管理生活”

MineContext 是一个会在后台记录与整理你日常电脑行为的开源工具。它的体验更像是一种新的信息整理方式:不需要额外输入,你的日常操作本身就是素材我现在一天基本离不开 AI 了。 不是那种“把提示词写得像炼丹”式的…

NCHU OOP-BLOG1-电梯调度-23207329-姚子康 - 翊尘

NCHU OOP-BLOG1-电梯调度程序 正文 1.前言 本次大作业分为三个阶段,每个阶段的最终Boss都是电梯调度程序及迭代,前面是几个关于类设计、正则表达式等等的小题,难度不是很大,但可以锻炼自己的类设计思维能力。 在写…