北邮电子院专业实验报告

.b(data[2]), .a(out[2]) );

dffr dffr2 (.q(out[2]), .d(n1[2]), .clk(clk), .rst_(rst_) );

mux mux1 (.out(n1[1]), .sel(load), .b(data[1]), .a(out[1]) );

dffr dffr1 (.q(out[1]), .d(n1[1]), .clk(clk), .rst_(rst_) );

mux mux0 (.out(n1[0]), .sel(load), .b(data[0]), .a(out[0]) );

dffr dffr0 (.q(out[0]), .d(n1[0]), .clk(clk), .rst_(rst_) );

例化寄存器

register r1 (

.data(data), .out(out), .load(load), .clk(clk), .rst_(rst_) );

例化时钟

clock c1 (

.clk(clk) );

添加检测信号 initial begin

$timeformat(-9,1,\

$monitor(\$stime,clk,data,load,out); $dumpvars(2,register_test); end

四、 仿真结果与波形

LAB 4:用always块实现较复杂的组合逻辑电路

一、

实验目的

掌握用always实现组合逻辑电路的方法;

了解assign与always两种组合逻辑电路实现方法之间的区别。

二、 实验原理

仅使用assign结构来实现组合逻辑电路,在设计中会发现很多地方显得冗长且效率低下。适当地使用always来设计组合逻辑,会更具实效。

本实验描述的是一个简单的ALU指令译码电路的设计示例。它通过对指令的判断,对输入数据执行相应的操作,包括加、减、或和传数据,并且无论是指令作用的数据还是指令本身发生变化,结果都要做出及时的反应。

示例中使用了电平敏感的always块,电平敏感的触发条件是指在@后括号内电平列表的任何一个电平发生变化就能触发always块的动作,并且运用了case结构来进行分支判断。

在always中适当运用default(在case结构中)和else(子if…else结构中),通常可以综合为纯组合逻辑,尽管被赋值的变量一定要定义为reg型。如果不使用default或else对缺省项进行说明,易产生意想不到的锁存器。

三、 源代码

电路描述

always@(opcode or data or accum) begin

if(accum==8'b00000000) #1.2 zero=1; else

#1.2 zero=0;

case(opcode)

PASS0: #3.5 out =accum; PASS1: #3.5 out =accum;

ADD: #3.5 out = data + accum; AND: #3.5 out =data&accum; XOR: #3.5 out =data^accum; PASSD: #3.5 out=data; PASS6:#3.5 out=accum; PASS7:#3.5 out=accum; default:#3.5 out=8'bx; endcase end

四、 仿真结果与波形

联系客服:779662525#qq.com(#替换为@)