首页 > 其他分享 >【HDLBits刷题日记】06 Basic Gates

【HDLBits刷题日记】06 Basic Gates

时间:2022-10-26 12:22:18浏览次数:58  
标签:Gates 06 HDLBits module endmodule output input assign out

Exams/m2014 q4h

module top_module (
    input in,
    output out);
assign out=in;
endmodule

Exams/m2014 q4i

module top_module (
    output out);
assign out=1'b0;
endmodule

Exams/m2014 q4e

module top_module (
    input in1,
    input in2,
    output out);
    assign out=!(in1|in2);
endmodule

Exams/m2014 q4f

module top_module (
    input in1,
    input in2,
    output out);
    assign out=in1&~in2;
endmodule

Exams/m2014 q4g

module top_module (
    input in1,
    input in2,
    input in3,
    output out);
    assign out=in3^(~(in1^in2));
endmodule

Gates

搞不懂为啥出这么多这种题.

module top_module( 
    input a, b,
    output out_and,
    output out_or,
    output out_xor,
    output out_nand,
    output out_nor,
    output out_xnor,
    output out_anotb
);
    assign out_and=a&b;
    assign out_or=a|b;
    assign out_xor = a^b;
    assign out_nand=~(a&b);
    assign out_nor=~(a|b);
    assign out_xnor = ~(a^b);
    assign out_anotb = a&~b;
endmodule

7420

module top_module ( 
    input p1a, p1b, p1c, p1d,
    output p1y,
    input p2a, p2b, p2c, p2d,
    output p2y );

    assign p1y=~(p1a&p1b&p1c&p1d);
    assign p2y=~(p2a&p2b&p2c&p2d);
endmodule

Truthtable1

时钟真值表实现组合逻辑,这种时候电路会综合成最小项(与门)之和(或门)的形式。我这里代码使用的是真值表,答案是直接把最小项之和写了出来,综合出的电路应该是一样的。

module top_module( 
    input x3,
    input x2,
    input x1,  // three inputs
    output f   // one output
);
    always@(*)
    begin
        case({x3,x2,x1})
            3'b000:f=0;
            3'b001:f=0;
            3'b010:f=1;
            3'b011:f=1;
            3'b100:f=0;
            3'b101:f=1;
            3'b110:f=0;
            3'b111:f=1;
        endcase
    end

endmodule

Mt2015 eq2

module top_module ( input [1:0] A, input [1:0] B, output z ); 
    assign z=(A==B)?1'b1:1'b0;
endmodule

Mt2015 q4a

module top_module (input x, input y, output z);
    assign z=(x^y)&x;
endmodule

Mt2015 q4b

这题要求看波形得到逻辑表达式,显然该逻辑关系代表同或。

module top_module ( input x, input y, output z );
    assign z=~(x^y);
endmodule

Mt2015 q4

根据RTL视图写代码。

module top_module (input x, input y, output z);
wire z1,z2;
    A IA1(x,y,z1);
    B IB1(x,y,z2);
    assign z=(z1|z2)^(z1&z2);
endmodule
module A (input x, input y, output z);
    assign z=(x^y)&x;
endmodule
module B ( input x, input y, output z );
    assign z=~(x^y);
endmodule

Ringer

这题也是只要把题目意思翻译成逻辑表达式即可。

module top_module (
    input ring,
    input vibrate_mode,
    output ringer,       // Make sound
    output motor         // Vibrate
);
    assign ringer=(ring&~vibrate_mode)?1'b1:1'b0;
    assign motor=(ring&vibrate_mode)?1'b1:1'b0;
endmodule

Thermostat

翻译题目意思即可,题目给的答案更简洁:fan = heater | aircon | fan_on;heater = (mode & too_cold);aircon = (~mode & too_hot);。

module top_module (
    input too_cold,
    input too_hot,
    input mode,
    input fan_on,
    output heater,
    output aircon,
    output fan
); 
    assign heater=(mode==1'b1&&too_cold == 1'b1)?1'b1:1'b0;
    assign aircon=(mode==1'b0&&too_hot == 1'b1)?1'b1:1'b0;
    assign fan=(heater||aircon||fan_on)?1'b1:1'b0;
endmodule

Popcount3

我这里直接用的加法实现了,题目用的逻辑实现的,较为复杂:out[0] = (~in[2] & ~in[1] & in[0]) | (~in[2] & in[1] & ~in[0]) | (in[2] & ~in[1] & ~in[0]) | (in[2] & in[1] & in[0]);out[1] = (in[1] & in[0]) | (in[2] & in[0]) | (in[2] & in[1]);

module top_module( 
    input [2:0] in,
    output [1:0] out );
    assign out=in[0]+in[1]+in[2];
endmodule

Gatesv

答案的方法要简洁很多,out_any = in[3:1] | in[2:0];out_both = in[2:0] & in[3:1];out_different = in ^ {in[0], in[3:1]};

module top_module( 
    input [3:0] in,
    output [2:0] out_both,
    output [3:1] out_any,
    output [3:0] out_different );
    assign out_both[2:0]={in[3]&in[2],in[2]&in[1],in[1]&in[0]};
    assign out_any[3:1]={in[3]|in[2],in[2]|in[1],in[1]|in[0]};
    assign out_different[3:0]={in[3]^in[0],in[3]^in[2],in[2]^in[1],in[1]^in[0]};
endmodule

Gatesv100

参考上一题的答案即可。

module top_module( 
    input [99:0] in,
    output [98:0] out_both,
    output [99:1] out_any,
    output [99:0] out_different );
    assign out_both=in[98:0]&in[99:1];
    assign out_any=in[99:1]|in[98:0];
    assign out_different=in^{in[0],in[99:1]};
endmodule

 

标签:Gates,06,HDLBits,module,endmodule,output,input,assign,out
From: https://www.cnblogs.com/magnolia666/p/16827884.html

相关文章

  • Chap06 回顾数据类型和表达式 第五组
    Chap06回顾数据类型和表达式1)数据存储方式:都是以二进制方式保存,最高位是符号位,0表示正数,1表示负数。 在计算机数据表达中提出了三个重要概念。原码反码补码  原......
  • CF1062E
    \(*\text{Defficult:}\color{Gold}{2300}\)Description给定一棵\(n\)个节点的树,有\(q\)个询问,每次询问给出一个区间\(l,r\)。要求在编号在\([l,r]\)范围内的点......
  • TR-069第一期第六修正版-8
    今天看的是会话部分。是TR交互的一个基础。3.4.2会话Sessions对于形成单个会话的一系列事务transactions,CPE应在会话期间保持TCP连接。具体而言,CPE不得在会话期间关闭TC......
  • CF1062E Company
    题目链接:​​传送门​​翻译那边有要知道树上一个区间的公共lca是区间dfs序的最小值和最大值对应的两个点的lca证明可以去网上找删掉dfs最大或最小的点然后再通过一次d......
  • Luogu P2455 [SDOI2006]线性方程组
    题目链接:​​传送门​​高斯消元可以去下面看一下​​​https://www.bilibili.com/video/av4688674​​​听视频比瞅博客有用得多这题算比较标准的板子了各种情况都有......
  • Luogu P1772 [ZJOI2006]物流运输
    题目链接:​​传送门​​很麻烦也很难想的一道题数据很小大胆yy详细解释在代码里#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<co......
  • Luogu P2859 [USACO06FEB]摊位预订Stall Reservations
    题目链接:​​传送门​​很明显的要贪心从左右端点考虑先排序保证单调性每次往后看有没有能接上的单调性才保证了这个往后看的复杂度于是就很好写了/***@Date:2019......
  • 0x000006d9(共享打印机错误0x000006d9)
    您好,我的电脑装的是windows8?您好,我的电脑装的是win这里有教程。您好,我的电脑装的是windows8?您好,我的电脑装的是win这里有教程。打印机无法共享怎么设置错误0x000006d9打印......
  • BZOJ 1001([BeiJing2006]狼抓兔子-最大流转对偶图最短路)
    1001:[BeiJing2006]狼抓兔子TimeLimit: 15Sec  MemoryLimit: 162MBSubmit: 5779  Solved: 1297​​Submit​​][​​Status​​][​​Discuss​​]D......
  • 【HDLBits刷题日记】04 Procedures
    Alwaysblock1组合逻辑always块的使用,注意这里的wire和reg综合出来的结果是一样的,这里只是verilog语法导致二者声明不一样。//synthesisverilog_input_versionverilog......