hnu数电实验(最终)Verilog各个模块代码(波形后续更新。。。)
指令译码器
module no2(input en,input[7:0] ins,output reg mova, movb, movc,add , sub , and1,not1, rsr , rsl ,jmp , jz , jc ,inl , outl, nop ,halt
);
always@(en,ins)
begin
{mova, movb, movc, add, sub, and1, not1, rsr, rsl, jmp, jz, jc, inl, outl, nop, halt} = 0;
{mova,movb,movc,add,sub,and1,not1,rsr,rsl,jmp,jz,jc,inl,outl,nop,halt}=0;mova = (ins[7:4] == 4'b1100) && (ins[3:2]!=2'b11) && (ins[1:0]!=2'b11);movb = (ins[7:4] == 4'b1100) && (ins[3:2]==2'b11);movc = (ins[7:4] == 4'b1100) && (ins[1:0]==2'b11);add = (ins[7:4] == 4'b1001);sub = (ins[7:4] == 4'b0110);and1 = (ins[7:4] == 4'b1011);not1 = (ins[7:4] == 4'b0101);rsr = (ins[7:4] == 4'b1010) && (ins[1:0]==2'b00);rsl = (ins[7:4] == 4'b1010) && (ins[1:0]==2'b11);jmp = (ins == 8'b00110000);jz = (ins == 8'b00110001);jc = (ins == 8'b00110010);inl = (ins[7:4] == 4'b0010);outl = (ins[7:4] == 4'b0100);nop = (ins == 8'b01110000);halt = (ins == 8'b10000000);
end
endmodule
控制信号产生逻辑
module con_signal(mova,movb,movc,add,sub,and1,not1,rsr,rsl,jmp,jz,z,jc,c,in1,out1,nop,halt,ir,sm,reg_ra,reg_rb,madd,alu_s,pc_ld,pc_inc,reg_we,ram_xl,ram_dl,alu_m,shi_fbus,shi_flbus,shi_frbus,ir_ld,cf_en,zf_en,sm_en,in_en,out_en);input mova,movb,movc,add,sub,and1,not1,rsr,rsl,jmp,jz,z,jc,c,in1,out1,nop,halt,sm;
input [7:0] ir;
output pc_ld,pc_inc,reg_we,ram_xl,ram_dl,alu_m,shi_fbus,shi_flbus,shi_frbus,ir_ld,cf_en,zf_en,sm_en,in_en,out_en;
output [1:0] reg_ra,reg_rb,madd;
output [3:0] alu_s;reg pc_ld,pc_inc,reg_we,ram_xl,ram_dl,alu_m,shi_fbus,shi_flbus,shi_frbus,ir_ld,cf_en,zf_en,sm_en,in_en,out_en;
reg [1:0] reg_ra,reg_rb,madd;
reg [3:0] alu_s;always @(mova,movb,movc,add,sub,and1,not1,rsr,rsl,jmp,jz,z,jc,c,in1,out1,nop,halt,ir,sm)
beginreg_ra = ir[1:0];reg_rb = ir[3:2];madd = 2'b00;alu_s = 4'b0000;pc_ld = 1'b0;pc_inc = 1'b0;reg_we = 1'b0;ram_xl = 1'b0;ram_dl = 1'b0;alu_m = 1'b0;shi_fbus = 1'b0;shi_flbus = 1'b0;shi_frbus = 1'b0;ir_ld = 1'b0;cf_en = 1'b0;zf_en = 1'b0;sm_en = 1'b0;in_en = 1'b0;out_en = 1'b0;if(sm == 1'b1)begin//DLram_dl = movc | jmp | (jz&z) | (jc&c); //XLram_xl = movb; //MADDmadd = {movb,movc}; //LD_PCpc_ld = jmp | (jz&z) | (jc&c); //IN_PCpc_inc = (jz == 1'b1&&z == 1'b0)|(jc == 1'b1&&c == 1'b0); //LD_IR//ir_ld = sm; //F_BUSshi_fbus = add | sub | and1 | not1 | out1 | mova | movb ; //FL_BUS shi_flbus = rsl; //FR_BUSshi_frbus = rsr; //Malu_m = add | sub | and1 | not1 | rsr | rsl | out1 ; //alu_s=ir[7:4];//S if(add == 1'b1) alu_s = 4'b1001; else if(sub == 1'b1) alu_s = 4'b0110;else if(and1 == 1'b1) alu_s = 4'b1011;else if(not1 == 1'b1) alu_s = 4'b0101;else if(rsr == 1'b1 ||rsl ==1'b1) alu_s = 4'b1010;else if(out1 == 1'b1) alu_s = 4'b0100;else if(mova == 1'b1||movb == 1'b1) alu_s = 4'b1100;// /WEreg_we = out1 | movb | jmp | jz | jc | halt|nop; //RAA//if(add == 1'b1||sub == 1'b1||and1 == 1'b1||mova == 1'b1||movb == 1'b1) reg_ra = ir[1:0];//RWBA//if(add == 1'b1||sub == 1'b1||and1 == 1'b1||not1 == 1'b1||rsr ==1'b1||rsl == 1'b1||in1 == 1'b1||out1 == 1'b1||mova == 1'b1||movc == 1'b1) reg_rb = ir[3:2];//CF_ENcf_en = add | sub | rsr | rsl; //ZF_EN zf_en = add | sub; //SM_EN sm_en = ~halt; //IN_EN in_en = in1; //OUT_EN out_en = out1; endelse //quzhibegin ram_dl = 1'b1; //DLpc_inc = 1'b1; //IN_PCir_ld = 1'b1; //LD_IRreg_we = 1'b1; // /WEsm_en = 1'b1; //SM_ENend
end
endmodule
SM
module SM1(input clk,sm_en,output reg sm
);
always@(negedge clk)
beginif(sm_en==1)begin sm<=~sm;end
end
endmodule
IR指令寄存器
module IR(
input clk,ir_id,
input [7:0] d,
output reg [7:0] ir
);
always@(negedge clk)
begin if(ir_id==1)beginir<=d;end
end
endmodule
八重3-1选择器 又名多路选择器
module select831(
input wire [7:0] a,b,c,
input wire [1:0] madd,
output reg [7:0] y
);
always@(a,b,c,madd)begin y=8'b00000000;case(madd)2'b00: y=a;2'b01: y=b;2'b10: y=c;default: y=a;endcaseend
endmodule
PC计数器
module PC(
input clk,pc_id,pc_inc,
input [7:0] a,
output [7:0] add
);
reg [7:0] temp=8'b00000000;
always@(negedge clk)
beginif(pc_inc==1 && pc_id==0)begintemp<=temp+1'b1;endif(pc_inc==0 && pc_id==1)begintemp<=a;end
endassign add=temp;
endmodule
reg_group寄存器
module reg_group(input wire clk,we,input wire [1:0] raa,rwba,input wire [7:0] i,output reg [7:0] s,d,output reg [7:0] a,b,c);
initial c=8'b10000000;
always @(raa or a or b or c)
begincase(raa)2'b00: s=a;2'b01: s=b;2'b10: s=c;default: s=c;endcase
endalways @(rwba or a or b or c) begincase(rwba)2'b00: d=a;2'b01: d=b;2'b10: d=c;default: d=c;endcase
endalways @(negedge clk) beginif(~we) begincase(rwba)2'b00: a<=i;2'b01: b<=i;2'b10: c<=i;endcaseend
end
endmodule
ALU运算器
module alu1(input wire m,
input wire [3:0] s,
input wire[7:0] a,
input wire[7:0] b,
output reg [7:0] t,
output reg cf,zf);
always@(m,s,a,b)
beginif(m==1) begincase(s)4'b1001:begin{cf,t}=a+b;if(t==8'b00000000)zf=1;else zf=0;end4'b0110:begin{cf,t}=b-a;if(t==8'b00000000)zf=1;else zf=0;end4'b1011:begint=a&b;cf=0;zf=0;end4'b0101:begint=~b;cf=0;zf=0;end//4'b1100:// begin// t=a;// cf=0;// zf=0;// end4'b1010: begint=b;cf=0;zf=0;end4'b0100:begint=b;cf=0;zf=0;enddefault:begint=8'b00000000;cf=0;zf=0;endendcaseendelsebegint=a;cf=0;zf=0;end//else//begin// t=8'b00000000;// cf=0;// zf=0;//endendendmodule
移位逻辑
module logic_yi_wei(
input wire [7:0] a,
input wire fbus,flbus,frbus,
output reg cf,
output reg [7:0] w
);
always @(a or fbus or flbus or frbus) begincf=1'b0;w=8'b00000000;if(fbus==1 && flbus==0 &&frbus==0)w=a;else if(fbus==0 && flbus==1 &&frbus==0) beginw={a[6:0],a[7]};cf=a[7];endelse if(fbus==0 && flbus==0 &&frbus==1) beginw={a[0],a[7:1]};cf=a[0];endelse if(fbus==0 && flbus==0 && frbus==0)beginw=8'bZZZZZZZZ;endend
endmodule
PSW
module PSW(
input clk,cf_en,zf_en,cf,zf,
output reg c,z
);always@(negedge clk)
beginif(cf_en==1)beginc<=cf;endif(zf_en==1)beginz<=zf;end
end
endmodule
引脚分配下板子
hnu数电实验(最终)Verilog各个模块代码(波形后续更新。。。)相关推荐
- 【杭电数电实验】verilog入门指北
verilog入门指北 前言 指北内容 面向人群 基础实验 1-15 代码参考 正文 ISE 的安装 实验的基本操作流程 可能出现的问题 创建工程闪退 希望删除某一文件,实际上并没有删除 如何编写测试 ...
- 【数电实验7】Verilog—外星萤火虫
[2022.05西南交大数电实验] [本代码及波形已通过老师验收.仅供参考.] [参考博客:[数电实验]外星萤火虫设计_难凉oh的博客-CSDN博客] [建议:有些口语化的注释看完删掉比较好哈,怕老师 ...
- 数电实验4:彩灯控制器设计
数电实验4:彩灯控制器设计 一.实验目的 二.实验内容 三.预习要求 四.实验报告要求 五.Verilog代码.RTL视图及仿真波形 1.Verilog代码 2.RTL视图 3.仿真波形 西南交大数电 ...
- 数电实验报告实验一_大二下学期的两三事之数电实验amp;课设
数电实验&课设 叮 写在前面 这学期的数电实验老师是陈W老师.上学期的模电,选过一次他的课,线下教学,老师讲课游刃自如,点到为止,但又醍醐灌顶:这学期线上教学,可能是软件运用不熟练,他多少有些 ...
- 北邮数电实验三接球小游戏
文章目录 前言 一.实验要求 二.设计思路 三.设计系统框图 四.源代码 五.遇到的问题和解决办法 六.总结 前言 北邮数电实验三"接球小游戏" 数电实验验收已经结束了,实验报告也 ...
- 数电实验6:可控分频器设计
数电实验6:可控分频器设计 一.实验目的 二.基本实验内容 三.提高性实验内容(选做) 四.预习实验 五.实验报告要求 六.内容讲解(基础实验内容) 七.testbench及仿真结果 1.testbe ...
- 数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D;
数电实验三 数据选择器及其应用 任务一:用74151芯片采用降维的方法实现F=ABC+ABD+ACD+BCD; 任务二:用74151芯片采用降维方式实现F=BCD反+BC反+A反D: 实验数据单
- 数电实验(一)利用与非门设计四舍五入判别电路
数电实验(一)利用与非门设计四舍五入判别电路 要求: 1.输入为8421BCD码,接四个逻辑电平开关,同时接数码管. 2.输出和LED相连. 一.写出逻辑函数: F(A,B,C,D)=∑m(5,6,7 ...
- c语言离散卷积编程,数电实验一 离散卷积的C语言编程.ppt
数电实验一 离散卷积的C语言编程.ppt 实验一 离散卷积的C语言编程实验,DSP实验室,实验性质,综合设计性实验,实验目的,1 了解和认识常用的各种信号: 2 掌握卷积的定义和计算方法: 3 掌握在 ...
最新文章
- bzoj1688[Usaco2005 Open]Disease Manangement 疾病管理*
- 解决Echarts窗口自适应失效问题
- hdu 1881 毕业bg
- 绿联网卡转接mac设置_物联网卡这样设置一下上网全程4G!建议收藏!
- 笔记·mybatis核心对象和全局配置文件
- 几何画板自定义工具_用好神奇的数学工具--几何画板,轻松作出复杂的几何图形...
- SDRAM控制器设计
- 无法将该对象添加到ldap服务器_LDAP 基础知识
- HDFView 3.1.2 在WIN10系统安装后打开出现黑框闪退的解决方法
- Keras-5 基于 ImageDataGenerator 的 Data Augmentation实现
- 大神干货:腾讯广告算法大赛亚军女极客生存图鉴
- HTML5 Notification
- 图像局部特征(十八)--BOW
- 为什么品质一直做不好?因为法方有问题
- 串口转以太网产品选型指南
- 使用Cloudflare给域名添加跳转/301重定向
- mysql wait for flush,Mysql线程大量Wating For table flush问题分析
- sinon.stub_JavaScript测试工具对决:Sinon.js vs testdouble.js
- 数学之美:维特比和维特比算法
- 昔日深圳打工妹周群飞或成中国新女首富