南京大学数字电路与计算机组成实验的Verilator仿真(二)

这篇具有很好参考价值的文章主要介绍了南京大学数字电路与计算机组成实验的Verilator仿真(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验二

1. 2-4译码器

top.v

module decode24(x,en,y);
  input  [1:0] x;
  input  en;
  output reg [3:0]y;

  always @(x or en)
    if (en)
    begin
      case (x)
            2'd0 : y = 4'b0001;
            2'd1 : y = 4'b0010;
            2'd2 : y = 4'b0100;
            2'd3 : y = 4'b1000;
      endcase
    end
    else  y = 4'b0000;

endmodule

sim_main.cpp

int main() {
  sim_init();

  top->en = 0b0;  top->x = 0b00;  step_and_dump_wave();
                  top->x = 0b01;  step_and_dump_wave();
                  top->x = 0b10;  step_and_dump_wave();
                  top->x = 0b11;  step_and_dump_wave();
  top->en = 0b1;  top->x = 0b00;  step_and_dump_wave();
                  top->x = 0b01;  step_and_dump_wave();
                  top->x = 0b10;  step_and_dump_wave();
                  top->x = 0b11;  step_and_dump_wave();
  sim_exit();
}

仿真结果
nvboard,数字系统设计,fpga开发,硬件工程

2. 4-2编码器

top.v

module encode42(x,en,y);
  input  [3:0] x;
  input  en;
  output reg [1:0]y;

  always @(x or en) begin
    if (en) begin
      case (x)
          4'b0001 : y = 2'b00;
          4'b0010 : y = 2'b01;
          4'b0100 : y = 2'b10;
          4'b1000 : y = 2'b11;
          default: y = 2'b00;
      endcase
    end
    else  y = 2'b00;
  end
endmodule

sim_main.cpp

int main() {
  sim_init();

  top->en=0b0; top->x =0b0000; step_and_dump_wave();
               top->x =0b0001; step_and_dump_wave();
               top->x =0b0010; step_and_dump_wave();
               top->x =0b0100; step_and_dump_wave();
               top->x =0b1000; step_and_dump_wave();
  top->en=0b1; top->x =0b0000; step_and_dump_wave();
               top->x =0b0001; step_and_dump_wave();
               top->x =0b0010; step_and_dump_wave();
               top->x =0b0100; step_and_dump_wave();
               top->x =0b1000; step_and_dump_wave();
  sim_exit();
}

仿真结果
nvboard,数字系统设计,fpga开发,硬件工程

3. 优先编码器

3. 优先编码器

top.v

module encode42(x,en,y);
  input  [3:0] x;
  input  en;
  output reg [1:0]y;
  integer i;
  always @(x or en) begin
    if (en) begin
      y = 0;
      for( i = 0; i <= 3; i = i+1)
          if(x[i] == 1)  y = i[1:0];
    end
    else  y = 0;
  end
endmodule

sim_main.cpp

int main(){
	sim_init();
	int i;
	top->en = 0;
	top->x = 0b0000;
	for(i=0;i<=15;i++){
	step_and_dump_wave();
	top->x = top->x+1;
	}
	step_and_dump_wave();
	top->en = 1;
	top->x = 0;
	for(i=0;i<=15;i++){
	step_and_dump_wave();
	top->x = top->x+1;
	}
	sim_exit();
}

nvboard,数字系统设计,fpga开发,硬件工程

4. 8-3优先编码器

nvboard,数字系统设计,fpga开发,硬件工程
top.v

module top (x,y,en,lb,seg0);
	input [7:0] x;
	input en;
	output reg lb;
	output reg [6:0] seg0;
	output reg [2:0] y;

	always@(*)
	begin
		if(en)
		begin
		lb = 1;
		casez(x) //此处用casex会warning,因为casex不可综合
			8'b0000_0000: begin y = 3'b000;lb = 0; end
			8'b0000_0001: y = 3'b000;
			8'b0000_001?: y = 3'b001;
			8'b0000_01??: y = 3'b010;
			8'b0000_1???: y = 3'b011;
			8'b0001_????: y = 3'b100;
			8'b001?_????: y = 3'b101;
			8'b01??_????: y = 3'b110;
			8'b1???_????: y = 3'b111;
			default: y = 3'b000;
		endcase
		end
		else y = 0;
	end
bcd7seg sg0({1'b0,y},seg0);
endmodule
			

bcd7seg.v

module bcd7seg(
	input [3:0] b,
	output reg [6:0] h
	);
	always@(*)
	begin
		case(b)
			4'b0000: h=7'b0000_001;
			4'b0001: h=7'b1001_111;
			4'b0010: h=7'b0010_010;
			4'b0011: h=7'b0000_110;
			4'b0100: h=7'b0110_011;
			4'b0101: h=7'b0100_100;
			4'b0110: h=7'b0100_000;
			4'b0111: h=7'b0001_111;
			4'b1000: h=7'b0000_000;
			4'b1001: h=7'b0000_100;
			4'b1010: h=7'b0001_000;
			4'b1011: h=7'b1100_000;
			4'b1100: h=7'b0110_001;
			4'b1101: h=7'b1000_010;
			4'b1110: h=7'b0110_000;
			4'b1111: h=7'b0111_000;
		endcase
	end
endmodule

sim_main.cpp

#include <verilated.h>
#include "Vtop.h"
#include <nvboard.h>

static TOP_NAME dut;
void nvboard_bind_all_pins(Vtop* top);
void single_cycle(){
	dut.eval();
	}
int main(){
	nvboard_bind_all_pins(&dut);
	nvboard_init();
	while(1){
		single_cycle();
		nvboard_update();
		}
	}

nvboard约束文件 top.nxdc

top = top
y(LD2,LD1,LD0)
x(SW7,SW6,SW5,SW4,SW3,SW2,SW1,SW0)
en(SW8)
seg0(SEG0A,SEG0B,SEG0C,SEG0D,SEG0E,SEG0F,SEG0G)
lb(LD4)

Makefile文件

TOPNAME = top
NXDC_FILES = constr/top.nxdc  #约束文件路径
INC_PATH ?=  #?=的意义是,INC_PATH如果被未被定义,则为?=后的值,如果被定义过,则保持原来的值

VERILATOR = verilator
VERILATOR_CFLAGS += -MMD --build --cc -O3 \
                    --x-assgin fast --x-initial fast --noassert --trace
BUILD_DIR = ./build
OBJ_DIR = $(BUILD_DIR)/obj_dir
 #OBJ_DIR = ./build/obj_dir
BIN = $(BUILD_DIR)/$(TOPNAME)
 #BIN = ./build/top

default: $(BIN) #终极目标为default,依赖./build/top

$(shell mkdir -p $(BUILD_DIR)) #建立./build目录

SRC_AUTO_BIND = $(abspath $(BUILD_DIR)/auto_bind.cpp) #abspath:返回文件的绝对路径
#SRC_AUTO_BIND = ~/vtest/ex2/part4/build/auto_bind.cpp 此为约束文件
$(SRC_AUTO_BIND): $(NXDC_FILES) # 目标文件(约束文件SRC_AUTO_BIND)的建立依赖于constr/top.nxdc
	python3 $(NVBOARD_HOME)/scripts/auto_pin_bind.py $^ $@
	# python3 $(NVBOARD_HOME)/scripts/auto_pin_bind.py constr/top.nxdc auto_bin.cpp 
	#此命令用来生成auto_bin.cpp文件

VSRCS = $(shell find $(abspath ./vsrc) -name "*.v")
#在~/vtest/ex2/part4/vsrc目录中寻找所有的.v文件
#VSRCS = top.v bcd7seg.v
CSRCS = $(shell find $(abspath ./csrc) -name "*.c" -or -name "*.cc" -or -name "*.cpp")
#CSRCS = sim_main.cpp
CSRCS += $(SRC_AUTO_BIND)
#CSRCS = sim_main.cpp auto_bind.cpp

include $(NVBOARD_HOME)/scripts/nvboard.mk
#在该Makefile中引用其他Makefile

INCFLAGS = $(addprefix -I, $(INC_PATH))
#INCFLAGS = -I
CFLAGS += $(INCFLAGS) -DTOP_NAME="\"V$(TOPNAME)\""
#CFLAGS = -I -DTOP_NAME="\"Vtop\""
LDFLAGS += -lSDL2 -lSDL2_image

$(BIN): $(VSRCS) $(CSRCS) $(NVBOARD_ARCHIVE)
#./build/top文件的建立依赖于 top.v bcd7seg.v sim_main.cpp auto_bind.cpp 以及verilator仿真可执行文件
	@rm -rf $(OBJ_DIR)
	$(VERILATOR) $(VERILATOR_CFLAGS)\
	--top-module $(TOPNAME) $^\
	$(addprefix -CFLAGS , $(CFLAGS)) $(addprefix -LDFLAGS , $(LDFLAGS)) \
	--Mdir $(OBJ_DIR) --exe -o $(abspath $(BIN))
	# verilator -MMD --build --cc -O3 --x-assgin fast --x-initial fast --noassert --trace \
	#--top-module top top.v bcd7seg.v sim_main.cpp auto_bind.cpp \
	#-CFLAGS -I -DTOP_NAME="\"VTOP\"" -LDFLAGS -lSDL2 -lSDL2_image \
	#--Mdir ./build/obj_dir --exe -o ./build/top
	#--top-module top 指定顶层文件名 --Mdir 将生成的文件都放入obj_dir目录中 --exe -o ./build/top 产生可执行文件并指定名字为./build/top
all: default

run:$(BIN)
	@$^
	#make run 执行可执行文件 ./build/top

clean:
	rm -rf $(BUILD_DIR)
.PHONY: default all clean run

结果展示

nvboard,数字系统设计,fpga开发,硬件工程
nvboard,数字系统设计,fpga开发,硬件工程
nvboard,数字系统设计,fpga开发,硬件工程文章来源地址https://www.toymoban.com/news/detail-557055.html

到了这里,关于南京大学数字电路与计算机组成实验的Verilator仿真(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 24届近5年南京大学自动化考研院校分析

    24届近5年南京大学自动化考研院校分析

    今天给大家带来的是 南京大学 控制考研分析 满满干货~还不快快点赞收藏  南京大学是一所历史悠久、声誉卓著的高等学府。其前身是创建于1902年的三江师范学堂,此后历经两江师范学堂、南京高等师范学校、国立东南大学、国立第四中山大学、国立中央大学、国立南京大

    2024年02月13日
    浏览(12)
  • 南京邮电大学数据库第一次课后作业

    1.单选题 (5分) ( B )是存储在计算机内有结构的数据的集合。 (A)数据库系统 (B)数据库 (C)数据库管理系统 (D)数据结构 2.单选题 (5分) 数据库的特点之一是数据的共享,严格的讲,这里的数据共享是指( D )。 (A)同—个应用中的多个程序共享一个数据集合 (B)多个用户

    2024年02月01日
    浏览(8)
  • 南京航空航天大学民航管理系统课程设计

    趁着最近备战c++实习,通过以前帮朋友写的课设复习一下c++,后面附有各个模块的功能实现。 建议通过多文件封装各个类的功能。 1.总体描述 : 本程序实现对民航飞行与地图管理系统的简单操作。 2.程序菜单功能: 地图记录是一个数据库列表,每一个记录包含一个城市的信

    2024年02月08日
    浏览(11)
  • 南京邮电大学数据库实验一(SQL语言)

    (1) 通过上机实践,熟悉Oracle的SQL * Plus环境及使用方法 (2) 掌握SQL语言,能熟练运用SQL语言进行数据定义和数据操纵 (3) 加深对关系数据模型的数据结构和约束的理解 硬件:微型计算机 软件:Windows 操作系统、ORACLE 10G 实验原理基于第二、三、五章的相关内容。 实验内容如下:

    2024年04月27日
    浏览(14)
  • 2023南京邮电大学通达学院《数学实验》MATLAB实验答案

    2023南京邮电大学通达学院《数学实验》MATLAB实验答案

    四月维夏,六月徂暑。 勤将励勉,勿望再晨。 ——赠nmy 南京邮电大学通达学院《数学实验》MATLAB实验答案 答案更新时间:2023.04.28,修改了4.2的存疑部分。已更新完成,如无错误不在更新 为了方便核算,我在代码中单独将 m 定义为自变量运算或者直接以m=117代入,作业中可以

    2023年04月20日
    浏览(52)
  • NIPS2022|南京大学提出基于点击后行为的广义延迟反馈模型

    NIPS2022|南京大学提出基于点击后行为的广义延迟反馈模型

    Generalized Delayed Feedback Model with Post-Click Information in Recommender Systems Jia-Qi Yang De-Chuan Zhan Nanjing University https://proceedings.neurips.cc/paper_files/paper/2022/file/a7f90da65dd41d699d00e95700e6fa1e-Paper-Conference.pdf 转化率预估(比如预测某个用户购买某个商品的概率)在机器学习推荐系统中是一个基本问

    2024年02月05日
    浏览(46)
  • 24届近5年南京工业大学自动化考研院校分析

    24届近5年南京工业大学自动化考研院校分析

    今天给大家带来的是 南京工业大学 控制考研分析 满满干货~还不快快点赞收藏  南京工业大学(Nanjing Tech University),简称“南工”,位于江苏省南京市,由国家国防科技工业局、住房和城乡建设部与江苏省人民政府共建,入选国家“2011计划”、“111计划”、“卓越工程师

    2024年02月13日
    浏览(10)
  • 24届近5年南京理工大学自动化考研院校分析

    24届近5年南京理工大学自动化考研院校分析

    今天学长给大家带来的是南京理工大学控制考研分析 满满干货~还不快快点赞收藏 ​ 南京理工大学是隶属于工业和信息化部的全国重点大学,学校由创建于1953年的新中国军工科技最高学府——中国人民解放军军事工程学院(简称“哈军工”)分建而成,经历了中国人民解放

    2024年02月13日
    浏览(14)
  • 24届近3年南京信息工程大学自动化考研院校分析

    24届近3年南京信息工程大学自动化考研院校分析

    今天给大家带来的是 南京信息工程 大学 控制考研分析 满满干货~还不快快点赞收藏  南京信息工程大学位于南京江北新区,是一所以大气科学为特色的全国重点大学,由江苏省人民政府、中华人民共和国教育部、中国气象局、国家海洋局共建,是国家首批世界一流学科建设

    2024年02月13日
    浏览(14)
  • 大日志精选案例一:南京师范大学教育信息化安全实践

    大日志精选案例一:南京师范大学教育信息化安全实践

    南京师范大学,由江苏省人民政府和中华人民共和国教育部共建,是国家“211工程”重点建设的江苏省属重点大学。在南京师范大学的教育信息化建设过程中,网络安全被视为重中之重。为了保障教学、科研和教务管理等信息化工作的安全进行,学校构建了多重网络安全防护

    2024年03月13日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包