verilog4位数字进制转换的设计

基本要求:对输入的4位二进制数据,能够根据外部的拨码开关来选择10进制转换、8进制转换还是16进制转换。
在完成基本要求的基础上,可进一步增加功能、提高性能,如增加输入的位数。
求详细的程序。小弟在此谢过~

输出是是什么?
猜测一下,输出是2个4bit的二进制,分别表示高位,和低位。代码参考如下:

module bin2dec(di, typ, do_msb, do_lsb);
input [3:0] di;
input typ;
output [3:0] do_msb, do_lsb;

always@(*)
if (typ) //十进制输出
begin
if (di >= 4'd10)
begin
do_msb = 4'd1;
do_lsb = di - 4'd10;
else
begin
do_msb = 4'd0;
do_lsb = di;
end
end
else //八进制输出
begin
do_msb = {3'b0, di[3]};
do_lsb = {1'b0, di[2:0]};
end

endmodule追问

4位数字进制转换的设计
基本要求:对输入的4位二进制数据,能够根据外部的拨码开关来选择10进制转换、8进制转换还是16进制转换。 我看了一下,大哥你的程序好像不是这个用途吧。
这是我们老师题目的基本要求,其他的应该是自己定义吧。要不,大哥你给个QQ吧,我请教请教你。不然我这题目不会的话。课程设计要不及格了

追答

关键是输出是什么?
不管转换成什么进制的,如果是纯数据输出的化,都是2进制表示输出,不同的是,比如,10进制,个位数单独表示,10进制单独表示。

如果是要数码管显示的化,则需要进行数码管的编码。

追问

就是输入一个4位的二进制数据。比如0010,然后拨到转换成10精制的开关,他会输出2.然后拨成8进制的,在输出一个数,拨到16进制的开关,在输出一个数。最后要在DE2上面显示出来。大哥,给我个QQ?

追答

在上班,不能上qq。

估计你那是数码管输出,其如何编码,我忘了,百度文库上很多。你搜搜。

参考代码如下,后面的数码管编码你搜搜。

module bin2dec(di, typ, disp_3bit, disp_2bit, disp_1bit, disp_0bit);input [3:0] di; input [1:0] typ; //00, 二进制输出,01,8进制输出,10,10进制输出,11,16进制输出。output reg [6:0] disp_3bit, disp_2bit, disp_1bit, disp_0bit;reg [3:0] do_3bit, do_2bit, do_1bit, do_0bit
//============================================================//进制转换always@(*) case (typ) 2'b00: begin do_3bit = {3'b0, di[3]}; do_2bit = {3'b0, di[2]}; do_1bit = {3'b0, di[1]}; do_0bit = {3'b0, di[0]}; end 2'b01: begin do_3bit = {4'b0 }; do_2bit = {4'b0 }; do_1bit = {3'b0, di[3] }; do_0bit = {1'b0, di[2:0]}; end 2'b10: begin do_3bit = {4'b0 }; do_2bit = {4'b0 }; do_1bit = {3'b0, di[3] }; do_0bit = {1'b0, di[2:0]}; if (di >= 4'd10) begin do_1bit = 4'd1; do_0bit = di - 4'd10; else begin do_1bit = 4'd0; do_0bit = di; end end 2'b11: begin do_3bit = {4'b0 }; do_2bit = {4'b0 }; do_1bit = {4'b0 }; do_0bit = { di[3:0]}; end endcase
//7管数码管输出//disp_3bit, disp_2bit, disp_1bit, disp_0bit;always@(*) case (do_0bit) 4'h0: disp_0bit = 7'h??? .... 4'hf: disp_0bit = 7'h??? endcase //disp_1bit
//disp_2bit
//disp_3bit
endmodule

温馨提示:答案为网友推荐,仅供参考
相似回答