预学习阶段 您所在的位置:网站首页 计算机语言三大阶段 预学习阶段

预学习阶段

2023-07-07 03:43| 来源: 网络整理| 查看: 265

verilog学习-搭建verilator仿真环境代码仓库及相关网页 ysyx官方网址 NJU-ProjectN/nvboard 数字电路与计算机组成实验 Sin_kider/verilog_learn 一生一芯实验报告目录 ysyx-预学习阶段-Linux-WSL安装 ysyx-预学习阶段-Linux-基本使用 ysyx-预学习阶段-C语言学习 ysyx-预学习阶段-verilog学习-搭建verilator仿真环境 ✨ ysyx-预学习阶段-PA1-NEMU ysyx-预学习阶段-如何科学地提问-读后感 ysyx-预学习阶段-总结 ysyx-B阶段-用RTL实现最简单的处理器-用Chisel实现单周期riscv64处理器 ysyx-B阶段-支持RV64IM的NEMU-用NEMU运行riscv64的程序 搭建环境

verilator安装还是比较简单的, 只需要跟随官方手册走就行, 以下是安装5.008版本的方法

sudo apt-get install git perl python3 make autoconf g++ flex bison ccachesudo apt-get install libgoogle-perftools-dev numactl perl-docsudo apt-get install libfl2 # 报错就忽略sudo apt-get install libfl-dev # 报错就忽略sudo apt-get install zlibc zlib1g zlib1g-dev # 报错就忽略git clone https://github.com/verilator/verilator # 克隆项目cd verilator git checkout v5.008 # 切换到对应分支autoconf./configuremake -j `你的cpu核心数`sudo make install

如果安装时遇到报错make: help2man: No such file or directory, 就手动安装一下help2man

sudo apt install help2man

verilator项目结构与部分文件如下

├── Makefile├── build│   ├── bin // 程序与生成的波形文件│   └── temp // 中间文件├── csrc│   ├── INC│   | └── main.h│   └── SRC│   └── main.cpp└── vsrc └── top.v # ./MakefileTOPNAME=topTOP_DIR:=$(dir $(abspath $(lastword $(MAKEFILE_LIST))))VERILATOR=verilatorVERILATOR_CFLAGS += -MMD --build -cc -O3 --x-assign fast --x-initial fast --noassertCFLAGS+=-DTOP_NAME=V$(TOPNAME)CSRC_PATH=$(TOP_DIR)csrcVSRC_PATH=$(TOP_DIR)vsrcV_DIR=$(foreach dir,$(VSRC_PATH),$(wildcard $(dir)/*.v))CPP_INC_PATH=$(CSRC_PATH)/INCCPP_SRC_PATH=$(CSRC_PATH)/SRCCPP_SRC_DIR=$(foreach dir,$(CPP_SRC_PATH),$(wildcard $(dir)/*.cpp))BUILD_PATH=$(TOP_DIR)buildOBJ_PATH=$(BUILD_PATH)/tempBIN_PATH=$(BUILD_PATH)/binBIN=$(BIN_PATH)/$(TOPNAME)WAVE_DIR=$(BIN_PATH)/wave.vcdall: build_prepare $(BIN)$(WAVE_DIR): $(BIN) @cd $(BIN_PATH) && ./$(TOPNAME)run:$(WAVE_DIR) @echo "> RUN $^"sim: $(WAVE_DIR) @echo "> SIM $^" @gtkwave $^$(BIN): $(V_DIR) $(CPP_SRC_DIR) @rm -rf $(OBJ_PATH) $(foreach vfile, $(V_DIR), $(info + V $(vfile))) $(foreach cppfile, $(CPP_SRC_DIR), $(info + CPP $(cppfile))) @$(VERILATOR) $(VERILATOR_CFLAGS) \ --top-module $(TOPNAME) \ $^ -I$(CPP_INC_PATH) $(CFLAGS) \ --Mdir $(OBJ_PATH) --trace --exe \ -o $(BIN).PHONY: all run sim build_prepare cleanbuild_prepare: @if [ ! -d $(BUILD_PATH) ]; then \ mkdir -p $(OBJ_PATH); \ mkdir -p $(BIN_PATH); \ ficlean: @echo "- RM $(BUILD_PATH)" @rm -rf $(BUILD_PATH) // ./csrc/SRC/main.cpp#include "verilated.h"#include "verilated_vcd_c.h"#include "Vtop.h"VerilatedContext* contextp = NULL;VerilatedVcdC* tfp = NULL;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, 3); tfp->open("./wave.vcd");}void sim_exit(){ step_and_dump_wave(); tfp->close();}int main(){ sim_init(); // 你的测试代码 sim_exit();}

接入Nvboard在这里不做说明, 想要了解的可以看我的verilog_learn项目代码写得烂, 各位大佬见谅

数电实验习题实验一 选择器

单说二选一选择器的话还是挺简单的, 一句assign就能解决, 当然也可以选择if, case或者使用MuxKey模板等下面是实验验收内容二位四选一选择器的代码

module mux241 ( input [7:0] X, input [1:0] Y, output [1:0] F); MuxKey #(4, 2, 2) i0 (F, Y, { 2'b00, X[1:0], 2'b01, X[3:2], 2'b10, X[5:4], 2'b11, X[7:6] }); // #(4, 2, 2) 4个键值对 2位输入 2位输出endmodule

一个小问题: 接入nvboard时延迟极高, 初次点击到实际显示大概需要半分钟左右, 花了很多时间去RTFSC后发现src/nvboard.cpp的宏定义FPS会影响程序运行, 将默认值60改为240后问题解决. (github源项目的issue也有人问这个问题, 我去那个issue反应了一下, 希望能帮到一些人)

实验二 译码器和编码器

译码器还比较简单, 本质就是将输入的编码转换为对应的数据输出, case与MuxKey模块都能做到. 文档还给出一种新的方式: for语句, 可以重复语句.

module decode38(x,en,y); input [2:0] x; input en; output reg [7:0]y; integer i; always @(x or en) if (en) begin for( i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有