首页 > 其他分享 >【HDLBits刷题日记】07 Multiplexer&Arithmetic adder

【HDLBits刷题日记】07 Multiplexer&Arithmetic adder

时间:2022-10-27 11:27:21浏览次数:46  
标签:cout HDLBits sum module output input out Multiplexer 07

Mux2to1

module top_module( 
    input a, b, sel,
    output out ); 
    assign out=sel?b:a;
endmodule

Mux2to1v

100位和1位的是一样的。

module top_module( 
    input [99:0] a, b,
    input sel,
    output [99:0] out );
    assign out=sel?b:a;
endmodule

Mux9to1v

一个case语句就可以解决,这里默认值用的:out=‘1;这里就可以把一个数的所有位都置为1,0、x、z也可以这样用,作者说喜欢赋一个初值,我好像更喜欢用一个default case,hhh。

module top_module( 
    input [15:0] a, b, c, d, e, f, g, h, i,
    input [3:0] sel,
    output [15:0] out );
    always@(*)
    begin
        case(sel)
            4'd0:out=a;
            4'd1:out=b;
            4'd2:out=c;
            4'd3:out=d;
            4'd4:out=e;
            4'd5:out=f;
            4'd6:out=g;
            4'd7:out=h;
            4'd8:out=i;
            default:out=16'b1111_1111_1111_1111;
        endcase
    end
endmodule

Mux256to1

看见around 1 line就知道怎么写了。

module top_module( 
    input [255:0] in,
    input [7:0] sel,
    output out );
    assign out=in[sel];
endmodule

Mux256to1v

这道题开始直接写的out=in[sel*4+3:sel*4];报错网上查了一下说是A[a:b]中的a、b应为常数,所以这里把四个数拼接起来。

答案还给了两种不常用的语法:out = in[sel*4 +: 4];代表从下标从sel开始累加四次,或者out = in[sel*4+3 -: 4];同理。

module top_module( 
    input [1023:0] in,
    input [7:0] sel,
    output [3:0] out );
    assign out={in[sel*4+3],in[sel*4+2],in[sel*4+1],in[sel*4]};
endmodule

Hadd

似曾相识。

module top_module( 
    input a, b,
    output cout, sum );
    assign  cout=a&b;
    assign sum=a^b;
endmodule

Fadd

module top_module( 
    input a, b, cin,
    output cout, sum );
    assign sum=a^b^cin;
    assign cout=a&b | a&cin | b&cin;
endmodule

Adder3

module top_module( 
    input [2:0] a, b,
    input cin,
    output [2:0] cout,
    output [2:0] sum );
    add add1(a[0],b[0],cin,cout[0],sum[0]);
    add add2(a[1],b[1],cout[0],cout[1],sum[1]);
    add add3(a[2],b[2],cout[1],cout[2],sum[2]);
endmodule
module add( 
    input a, b, cin,
    output cout, sum );
    assign sum=a^b^cin;
    assign cout=a&b | a&cin | b&cin;
endmodule

Exams/m2014 q4j

想复杂了,答案直接sum=x+y。

答案告诉了verilog一个很奇特的地方x+y包括进位,但是x+y仍是一个4位的数,所以sum=x+y是对的,但是sum = {x+y}是错的。

module top_module (
    input [3:0] x,
    input [3:0] y, 
    output [4:0] sum);
    wire cout[3:0];
    fadd add1(x[0],y[0],1'b0,cout[0],sum[0]);
    fadd add2(x[1],y[1],cout[0],cout[1],sum[1]);
    fadd add3(x[2],y[2],cout[1],cout[2],sum[2]);
    fadd add4(x[3],y[3],cout[2],sum[4],sum[3]);
endmodule
module fadd( 
    input a, b, cin,
    output cout, sum );
    assign sum=a^b^cin;
    assign cout=a&b | a&cin | b&cin;
endmodule

Exams/ece241 2014 q1c

这里有两种情况可能导致溢出:1、两个数都为正数,即a[7]和b[7]都为0,而相加后溢出,即s[7]为1;2、两个数都为负数,即a[7]和b[7]都为1,而相加后溢出,即s[7]为0;

module top_module (
    input [7:0] a,
    input [7:0] b,
    output [7:0] s,
    output overflow
); //
 
    assign s = a+b;
    assign overflow = (a[7]&b[7]&~s[7])|(~a[7]&~b[7]&s[7]);

endmodule

Adder100

直接写+号就是爽

module top_module( 
    input [99:0] a, b,
    input cin,
    output cout,
    output [99:0] sum );
    assign {cout,sum}=a+b+cin;
endmodule

Bcdadd4

注意bcd编码不能直接用加法符号。

module top_module ( 
    input [15:0] a, b,
    input cin,
    output cout,
    output [15:0] sum );
    wire [2:0]c;
    bcd_fadd add[3:0](a[15:0],b[15:0],{c[2:0],cin},{cout,c[2:0]},sum[15:0]);
endmodule

 

标签:cout,HDLBits,sum,module,output,input,out,Multiplexer,07
From: https://www.cnblogs.com/magnolia666/p/16831291.html

相关文章

  • LC 907 Sum of Subarray Minimums
    DecrisptionGivenanarrayofintegersarr,findthesumofmin(b),wherebrangesoverevery(contiguous)subarrayofarr.Sincetheanswermaybelarge,retu......
  • 20年ST全国巡回送的Nucleo-64 STM32G070,吃灰.....
     说是可以和Arduino合体,还没试过。  ST官网搜索型号下载数据手册,IDE直接使用STM32CubeIDE好用。由于使用了MicroUSB转USB,所以需要下载专门的驱动程序 stlink-......
  • POJ4072多点共线问题
    有N(1<=n<=100)<span="">个互不重合的点,并给出它们的坐标(xi,yi),问这些点是否在同一直线上。输入第一行是测试的组数T(1<=T<=100),其后是T组数据,每组数据第一行是该......
  • P7078 [CSP-S2020] 贪吃蛇
    [CSP-S2020]贪吃蛇LuoguP7078题目描述草原上有\(n\)条蛇,编号分别为\(1,2,\ldots,n\)。初始时每条蛇有一个体力值\(a_i\),我们称编号为\(x\)的蛇实力比编号为......
  • 【HDLBits刷题日记】06 Basic Gates
    Exams/m2014q4hmoduletop_module(inputin,outputout);assignout=in;endmoduleExams/m2014q4imoduletop_module(outputout);assignout=......
  • AcWing107 超快速排序(树状数组找逆序对)
    原题链接思路求到底要和相邻元素交换几次,其实就是求逆序对的数量,有几对逆序对就要交换几次,因为只能相邻的之间交换(超快速排序?冒泡排序!)利用树状数组求逆序对大概想法......
  • Luogu 1507 NASA的食物计划
    题目链接:​​传送门​​题目背景NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力下终止了航天飞机的历史,但是此类事情会不会在以......
  • BZOJ 1185([HNOI2007]最小矩形覆盖-旋转卡壳+点集几何意义)
    1185:[HNOI2007]最小矩形覆盖TimeLimit: 10Sec  MemoryLimit: 162MBSec  SpecialJudgeSubmit: 258  Solved: 137Description l要事先改成......
  • BZOJ 1007(水平可见直线-斜率排序+栈贪心)
    1007:[HNOI2008]水平可见直线TimeLimit: 1Sec  MemoryLimit: 162MBSubmit: 1830  Solved: 656[​​Submit​​][​​Status​​][​​Discuss​​]......
  • zbx_tcp_listen() fatal error:unable to serve on any address [[-]:10070]
    Zabbix服务器未启动侦听器失败:zbx_tcp_listen()致命错误:无法在任何地址上提供服务[[-]:10070]日志错误:服务状态以及尝试启动时:进程正在运行:但是服务仍然停止: ......