文档介绍:
Verilog HDL代码
input A
module inputA(p,x,A);
input [1:0]p;
input [15:0]x;
output reg [16:0]A;
always @ (x,p)
begin
if(p == 2'b11) A={x[15],x[15:0]};
end
endmodule
input B
module inputB(p,x,B);
input [1:0]p;
input [15:0]x;
output reg [16:0]B;//17位
always @ (x,p)
begin
if(p == 2'b10) B={x[15],x[15:0]};
end
endmodule
input ABs
module inputABs(p,x,A,B,s,M,Ci);//输入A B
parameter bit_width=16;
input [1:0]p;
output M;
input [bit_width-1:0]x;//输入16位的x
output [bit_width:0]A,B;//定义17位的A,B 用来输入A,B
output [2:0]s;
output Ci;
reg [bit_width:0]A,B;
reg [2:0]s;
reg M,Ci;
always @ (p,x,A,B,s,Ci)
case (p)
2'b01:begin s[2:0] = x[2:0]; M=x[3];Ci=x[4];end//输入 Ci M s
2'b11: A= {x[15],x};//输入A A为17位采用双符号位
2'b10: B = {x[15],x};//输入B
endcase
endmodule
input Ms
module inputMs(p,x,M,s,Ci);
input [1:0]p;
input [15:0]x;
output reg [2:0]s;
output reg M,Ci;
always @ (x,p)
begin
if(p == 2'b01) begin s<=x[2:0];M=x[3];Ci=x[4];end
end
endmodule
alu_18
module alu_16(S,A,B,F,M,CO,OV,Z,Ci,N);
//Cn Co进位 Ci来自低位的进位 OV溢出 N符号位 Z:0标志
parameter bit_width=16; //定义bit_width为16
input M,Ci;
input [2:0] S;//s是三位的
input [bit_width:0]A,B;//A,B为17位;双符号位判断是否溢出
output N,Z;
output [bit_width:0]F;//F输出17位;双符号位判断是否溢出
output CO,OV; // CO进位;OV判溢出
reg [bit_width:0]F;
reg CO,OV;
reg N,Z;
always @(S)
begin
case(S)
3'b000 :begin
if(M){CO,F}=A+
内容来自淘豆网www.taodocs.com转载请标明出处.