|
楼主 |
发表于 2013-6-30 19:05:56
|
显示全部楼层
本帖最后由 huatong 于 2013-6-30 19:07 编辑
yixinyiyi 发表于 2013-6-30 18:50
BCD转十进制有方法的,坛子里有,你这样写太耗资源了
现在已经改了,40位二进制转换成8位十进制5级流水线.没有贴出来罢了- /***********************************************************
- 40位二进制转换为8位十进制
- ***********************************************************/
- module BinaryToBCD(clk,bin,bcd);
- input clk;
- input [31:0] bin;
- output [39:0] bcd;
- reg [39:0] bcd;
- reg [31:0] bin0,bin1,bin2,bin3,bin4; // /*synthesis noprune*/;
- always@(posedge clk) begin
- bin0<=bin;
- bin1<=bin0;
- bin2<=bin1;
- bin3<=bin2;
- bin4<=bin3;
- end
- wire [3:0] o1,o2,o3;
- wire [5:0] i1;
- Add3 c1({1'b0,bin0[31:29]},o1);
- Add3 c2({o1[2:0],bin0[28]},o2);
- Add3 c3({o2[2:0],bin0[27]},o3);
- assign i1={o1[3],o2[3],o3};
- wire [7:0] o21,o22,o23;
- reg [9:0] i2;
- add3_8 c4({1'b0,i1,bin0[26]},o21);
- add3_8 c5({o21[6:0],bin0[25]},o22);
- add3_8 c6({o22[6:0],bin0[24]},o23);
- always@(posedge clk) i2<={o21[7],o22[7],o23}; // 第一级流水线
- wire [11:0] o31,o32,o33;
- wire [13:0] i3;
- add3_12 c7({1'b0,i2,bin1[23]},o31);
- add3_12 c8({o31[10:0],bin1[22]},o32);
- add3_12 c9({o32[10:0],bin1[21]},o33);
- assign i3={o31[11],o32[11],o33};
- wire [15:0] o41,o42,o43;
- reg [17:0] i4;
- add3_16 c10({1'b0,i3,bin1[20]},o41);
- add3_16 c11({o41[14:0],bin1[19]},o42);
- add3_16 c12({o42[14:0],bin1[18]},o43);
- always@(posedge clk) i4<={o41[15],o42[15],o43}; // 第二级流水线
- wire [19:0] o51,o52,o53;
- wire [21:0] i5;
- add3_20 c13({1'b0,i4,bin2[17]},o51);
- add3_20 c14({o51[18:0],bin2[16]},o52);
- add3_20 c15({o52[18:0],bin2[15]},o53);
- assign i5={o51[19],o52[19],o53};
- wire [23:0] o61,o62,o63;
- reg [25:0] i6;
- add3_24 c16({1'b0,i5,bin2[14]},o61);
- add3_24 c17({o61[22:0],bin2[13]},o62);
- add3_24 c18({o62[22:0],bin2[12]},o63);
- always@(posedge clk) i6<={o61[23],o62[23],o63}; // 第三级流水线
- wire [27:0] o71,o72,o73;
- wire [29:0] i7;
- add3_28 c19({1'b0,i6,bin3[11]},o71);
- add3_28 c20({o71[26:0],bin3[10]},o72);
- add3_28 c21({o72[26:0],bin3[9]},o73);
- assign i7={o71[27],o72[27],o73};
- wire [31:0] o81,o82,o83;
- reg [33:0] i8;
- add3_32 c22({1'b0,i7,bin3[8]},o81);
- add3_32 c23({o81[30:0],bin3[7]},o82);
- add3_32 c24({o82[30:0],bin3[6]},o83);
- always@(posedge clk) i8<={o81[31],o82[31],o83}; // 第四级流水线
- wire [35:0] o91,o92,o93;
- wire [37:0] i9;
- add3_36 c25({1'b0,i8,bin4[5]},o91);
- add3_36 c26({o91[34:0],bin4[4]},o92);
- add3_36 c27({o92[34:0],bin4[3]},o93);
- assign i9={o91[35],o92[35],o93};
- wire [39:0] o101,o102,o103;
- wire [41:0] i10;
- add3_40 c28({1'b0,i9,bin4[2]},o101);
- add3_40 c29({o101[38:0],bin4[1]},o102);
- assign i10={o101[39],o102,bin4[0]};
- always@(posedge clk) bcd<=i10[39:0]; // 第五级流水线
- endmodule
- /*********** 4位比较加3模块 *************/
- module Add3(in,out);
- input [3:0] in;
- output reg [3:0] out;
- always@(in)
- case(in)
- 4'b0000: out<=4'b0000;
- 4'b0001: out<=4'b0001;
- 4'b0010: out<=4'b0010;
- 4'b0011: out<=4'b0011;
- 4'b0100: out<=4'b0100;
- //
- 4'b0101: out<=4'b1000;
- 4'b0110: out<=4'b1001;
- 4'b0111: out<=4'b1010;
- 4'b1000: out<=4'b1011;
- 4'b1001: out<=4'b1100;
- //
- default: out<=4'b0000;
- endcase
- endmodule
- module add3_8(in,out);
- input [7:0] in;
- output [7:0] out;
-
- Add3 m1(in[7:4],out[7:4]);
- Add3 m2(in[3:0],out[3:0]);
- endmodule
- module add3_12(in,out);
- input [11:0] in;
- output [11:0] out;
-
- Add3 m1(in[11:8],out[11:8]);
- add3_8 m2(in[7:0],out[7:0]);
- endmodule
- module add3_16(in,out);
- input [15:0] in;
- output [15:0] out;
-
- Add3 m1(in[15:12],out[15:12]);
- add3_12 m2(in[11:0],out[11:0]);
- endmodule
- module add3_20(in,out);
- input [19:0] in;
- output [19:0] out;
-
- Add3 m1(in[19:16],out[19:16]);
- add3_16 m2(in[15:0],out[15:0]);
- endmodule
- module add3_24(in,out);
- input [23:0] in;
- output [23:0] out;
-
- Add3 m1(in[23:20],out[23:20]);
- add3_20 m2(in[19:0],out[19:0]);
- endmodule
- module add3_28(in,out);
- input [27:0] in;
- output [27:0] out;
-
- Add3 m1(in[27:24],out[27:24]);
- add3_24 m2(in[23:0],out[23:0]);
- endmodule
- module add3_32(in,out);
- input [31:0] in;
- output [31:0] out;
-
- Add3 m1(in[31:28],out[31:28]);
- add3_28 m2(in[27:0],out[27:0]);
- endmodule
- module add3_36(in,out);
- input [35:0] in;
- output [35:0] out;
-
- Add3 m1(in[35:32],out[35:32]);
- add3_32 m2(in[31:0],out[31:0]);
- endmodule
- module add3_40(in,out);
- input [39:0] in;
- output [39:0] out;
-
- Add3 m1(in[39:36],out[39:36]);
- add3_36 m2(in[35:0],out[35:0]);
- endmodule
复制代码 |
|