hnu 模型机时序部件的实现

模型机时序部件的实现

含Verilog代码和bdf图
(不一定对,仅编译,未仿真。可能会有更改,欢迎指正)
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

1. SM

module SM (
    input clk,sm_en,
    output reg sm
);
always @(negedge clk or negedge sm_en) begin
    if(sm==1'bz)begin sm=1'b0;end
    if(~sm_en)begin
        sm<=1'bz;
    end
    else begin
        sm<=~sm;
    end
end    
endmodule

//更改

module SM(
    input clk,sm_en,
    output reg sm
);
initial sm=1'b0;
always @(negedge clk) begin
    if(sm_en)begin
        sm<=~sm;
    end
    else begin
        sm<=sm;
    end
end    
endmodule

2、指令寄存器IR

module IR (
    input clk,ir_ld,
    input [7:0] d,
    output reg [7:0] ir
);
always @(negedge clk or negedge ir_ld) begin
    if(~ir_ld)begin
        ir<=1'bz;
    end
    else begin
        ir<=d;
    end
end    
endmodule

//更改

module IR (
    input clk,ir_ld,
    input [7:0] d,
    output reg [7:0] ir
);
always @(negedge clk) begin
    if(~ir_ld)begin
        ir<=8'hzz;
    end
    else begin
        ir<=d;
    end
end    
endmodule

3、状态寄存器PSW

module PSW (
    input clk,cf_en,zf_en,
    input cf,zf,
    output reg c,z
);
always @(negedge clk or negedge cf_en) begin
    if(~cf_en)begin
        c<=1'bz;
    end
    else begin
        c<=cf;
    end
end
always @(negedge clk or negedge zf_en) begin
    if(~zf_en)begin
        z<=1'bz;
    end
    else begin
        z<=zf;
    end
end    
endmodule

//更改

module PSW (
    input clk,cf_en,zf_en,
    input cf,zf,
    output reg c,z
);
initial begin c=1'b0;z=1'b0;end
always @(negedge clk) begin
    if(cf_en)begin
        c<=cf;
    end
    else begin
        c<=c;
    end
end
always @(negedge clk) begin
    if(zf_en)begin
        z<=zf;
    end
    else begin
        z<=z;
    end
end    
endmodule

4、指令计数器PC

module PC (
    input clk,pc_inc,pc_ld,
    input [7:0] a,
    output reg[7:0] add
);
always @(negedge clk) begin
    if(pc_inc==1'b1&&pc_ld==1'b0)begin
        add<=add+1'b1;
    end
    else if(pc_inc==1'b0&&pc_ld==1'b1) begin
        add<=a;
    end
    else begin add<=add;end
end    
endmodule

5、通用寄存器组

module group (
    input clk,we,
    input [1:0] raa,rwba,
    input [7:0] i,
    output reg[7:0] s,d
);
reg[7:0] A=8'b0000_0001,B=8'b0000_0010,C=8'b0000_0100; 
parameter a=2'b00,b=2'b01,c=2'b10;   
always @(raa or rwba or A or B or C) begin
    case (raa)
    a:begin s=A;end
    b:begin s=B;end
    c:begin s=C;end
    default:begin s=1'bz;end
    endcase
    case (rwba)
    a:begin d=A;end
    b:begin d=B;end
    c:begin d=C;end
    default:begin d=1'bz;end
    endcase
end
always @(negedge clk) begin
    if(we==1'b0)begin
        case (rwba)
        a:begin A<=i;end
        b:begin B<=i;end
        c:begin C<=i;end
        endcase
    end
    else begin A<=A;end//it is useless
end
endmodule

//更改

module group (
    input clk,we,
    input [1:0] raa,rwba,
    input [7:0] i,
    output reg[7:0] s,d
);
reg[7:0] A=8'b0000_0001,B=8'b0000_0010,C=8'b0000_0100; 
parameter a=2'b00,b=2'b01,c=2'b10;   
always @(raa or rwba or A or B or C) begin
    case (raa)
    a:begin s=A;end
    b:begin s=B;end
    c:begin s=C;end
    default:begin s=C;end
    endcase
    case (rwba)
    a:begin d=A;end
    b:begin d=B;end
    c:begin d=C;end
    default:begin d=C;end
    endcase
end
always @(negedge clk) begin
    if(we==1'b0)begin
        case (rwba)
        a:begin A<=i;end
        b:begin B<=i;end
        c:begin C<=i;end
        default:begin C<=i;end
        endcase
    end
    else begin A<=A;end//it is useless
end
endmodule

6、RAM
在这里插入图片描述
大概就是按着pdf里面的来
可能需要注意一点的地方:
1.消除多余引脚:双击列表—>Ports—>不需要的引脚—>Status—>unused
2.列表里面的Value和Type设置:双击列表,Parameters里面都有。setting 设置value,type里面设置type。
3.里面那些比较粗的线是主线,可能需要手动设置。
4.输入输出的设置:按照pdf里面的设就行,不要忽略[]的内容。
5.LPM FILE的value是mif文件,可以手动把文件输上去。

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值