首页 > 其他分享 >牛客网刷题二

牛客网刷题二

时间:2023-06-25 23:22:24浏览次数:46  
标签:wire 1ns 网刷题 牛客 && input output assign

牛客网FPGA题库刷题之快速入门题库(一)9~13题

14-20没啥用 就是看图写,不需要做了

第九题

题目链接

使用子模块实现三输入数的大小比较

代码


`timescale 1ns/1ns

module main_mod(

input clk,

input rst_n,

input [7:0]a,

input [7:0]b,

input [7:0]c, 

output [7:0]d

);



//reg wire declaration

wire [7:0] tmp1;

reg [7:0] tmp2;



//buff c

always  @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

tmp2 <= 0;

end

else begin

tmp2 <= c;

end

end



//模块调用

sub_mod u1(

.clk(clk),

.rst_n(rst_n),

.a(a),

.b(b),

.d(tmp1)



);



sub_mod u2(

.clk(clk),

.rst_n(rst_n),

.a(tmp1),

.b(tmp2),

.d(d)

);





endmodule





//子模块的编写

module sub_mod(

input clk,

input rst_n,

input [7:0]a,

input [7:0]b,

output [7:0]d

);



reg [7:0] tmp;



always  @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

tmp <= 0;

end

else if(a<b) begin

tmp <= a;

end

else begin

tmp <= b;

end

end



assign d = tmp ;

endmodule







题目解析

首先写子模块,比较双个数的大小。然后在主模块调用,需要注意子模块有一个时钟的时序延时,所以需要c延时一个时钟

第十题 函数、generate用法

题目链接

使用函数实现数据大小端转换_牛客题霸_牛客网 (nowcoder.com)

代码


`timescale 1ns/1ns

module function_mod(
    input [3:0]a,
    input [3:0]b,
    input clk,
    input rst_n,
    output [3:0]c,
    output [3:0]d
);

assign c = rever(a);
assign d = rever(b);

function [3:0] rever;
input [    3: 0]     datain    ;
integer i;
for(i=0; i <4; i++)
begin:revers
rever[i] = datain[3-i];
end
endfunction

endmodule

题目解析

verilog 里面函数的使用方法,一般函数都是组合逻辑,没有时序逻辑,然后这题的clk和rst_n没有任何作用

第十一题

题目链接

4位数值比较器电路_牛客题霸_牛客网 (nowcoder.com)

image-20230624230359346

代码


`timescale 1ns/1ns



module comparator_4(

input        [3:0]       A       ,

input       [3:0]        B       ,



output     wire        Y2    , //A>B

output   wire        Y1    , //A=B

output   wire        Y0      //A<B

);

assign Y2 = A[3]>B[3]||(A[3]==B[3]&&A[2]>B[2])||(A[3]==B[3]&&A[2]==B[2]&&A[1]>B[1])|||(A[3]==B[3]&&A[2]==B[2]&&A[1]==B[1]&&A[0]>B[0]);

assign Y1 =(A[3]==B[3]&&A[2]==B[2]&&A[1]==B[1]&&A[0]==B[0]);

assign Y0 = ~(Y2||Y1);

endmodule

题目解析

看真值表写就好了

第十二题

4bit超前进位加法器电路

题目链接

image-20230625000135888

代码

module pg_gen(
input A,
input B,
output G,
output P
);
assign G = A & B;
assign P = A ^ B;
endmodule

module lca_4(
input  [3:0] A_in,
input  [3:0] B_in,
input  C_1,
output [3:0] S,
output CO
);

parameter width = 4;
wire [width-1:0] G;
wire [width-1:0] P;
wire [width:0] C;

genvar i;
for( i=0; i<width; i=i+1) begin:sdad
pg_gen u_pg_gen(
.A( A_in[i]),
.B( B_in[i]),
.G( G[i]  ),
.P( P[i]  )
);
end

assign C[0] = C_1;
assign C[1] = G[0] || ( C[0] & P[0] );
assign C[2] = G[1] || ( C[1]  & P[1] );
assign C[3] = G[2] || ( C[2]  & P[2] );
assign C[4] = G[3] || ( C[3]  & P[3] );
assign CO = C[4];

generate
genvar k;
for( k=0; k<width; k=k+1) begin:sdas
assign S[k] = P[k] ^ C[k];
end
endgenerate
endmodule

题目解析

简析

如果只是简单地将逻辑表达式转化为verilog语言,这道题算不上较难题。难点应该是借着这道题理解超前进位加法器。下面梳理一些常见的加法器。

半加器

半加器是最简单的加法器。它不考虑进位输入。其中AB是两个加数,S是和,C_o是进位输出。

assign S   = A ^ B;
assign C_out = A & B;

对于4bit LCA,进位输出C4​的计算路径如下:S

image

13题 优先编码器电路

优先编码器电路

image-20230625000427200

`timescale 1ns/1ns

module encoder_0(
   input      [8:0]         I_n   ,
   
   output reg [3:0]         Y_n   
);


always  @(*)begin
    casex (I_n)
    9'b0xxxxxxxx : Y_n = 4'b0110;
    9'b111111111 : Y_n = 4'b1111;
    9'b10xxxxxxx : Y_n = 4'b0111;
    9'b110xxxxxx : Y_n = 4'b1000;
    9'b1110xxxxx : Y_n = 4'b1001;
    9'b11110xxxx : Y_n = 4'b1010;
    9'b111110xxx : Y_n = 4'b1011;
    9'b1111110xx : Y_n = 4'b1100;
    9'b11111110x : Y_n = 4'b1101;
    9'b111111110 : Y_n = 4'b1110;
    endcase
end

endmodule

标签:wire,1ns,网刷题,牛客,&&,input,output,assign
From: https://www.cnblogs.com/doincli/p/17504238.html

相关文章

  • 牛客题解-mixup2混乱的奶牛(状压dp)
    题解-mixup2混乱的奶牛[原题连接](1026-mixup2混乱的奶牛_2021秋季算法入门班第八章习题:动态规划2(nowcoder.com))题目描述混乱的奶牛[DonPiele,2007]FarmerJohn的N(4<=N<=16)头奶牛中的每一头都有一个唯一的编号S_i(1<=S_i<=25,000).奶牛为她们的编号感到骄傲......
  • 牛客竞赛刷题模板
    牛客竞赛自用,便于复制for(letT=parseInt(readline());T>0;T--){const[n,m]=readline().split('',2).map(v=>parseInt(v));constnums=readline().split('',n).map(v=>parseInt(v));letsum=0;constsub......
  • transform (牛客多校) (双指针+二分+ 中位数妙用+前缀和相减维护)
    题目大意:n个商店在一条直线上, 有一个xi然后有ai个商品你可以把商店的物品移动到另一个商店,代价为:abs(xi-xj)在代价不超过T的情况下你可以选择一个商店来让其他商店的物品都移到这个商店,问最多移动多少个物品  思路:双指针维护一个最大的区间,因......
  • farm (牛客多校) (二维树状+数学式子优化+rand()去除特殊情况)
    题目大意:给出一个n*m的田地矩阵,每个格子上种着一种植物。给格子施肥t次,每一次给出五个数字,x1,y1,x2,y2,k,要施肥的区域坐标和要施的肥料种类。如果植物和施肥种类不匹配,植物会死亡。问最终会死多少个植物。 思路:判断一个植物死不死, 判断植物种类*施肥次数==施肥种类总和某......
  • car (牛客多校) (情景找规律,抠细节)
    题目大意:给一个正方形棋盘,你现在可以在棋盘的边缘防止车,然后车只能向正对的方向走,(角落可以往2边走)2个车相遇会G给m个破环的方块,车经过就G问最多可以放多少个车] 思路:注意奇偶分规律,偶数2*n,奇数2*n-1注意放置破环的方块,在奇数最中间的时候,......
  • Longest Path (牛客多校) (换根DP+斜率优化)
    换根dp:第一次dfs处理儿子点的权值第二次dfs处理父亲点,和兄弟节点的权值处理兄弟节点的时候,利用父亲节点统一处理,利用stl存储斜率优化:为什么会用到斜率优化:在遇到转移式子是fixfj的时候,不是分开的,(分开的,直接用单调队列处理)(通常会遇到平方式子)把......
  • 牛客网刷题一
    牛客网FPGA题库刷题之快速入门题库(一)1~8题第一题题目链接:四选一多路器代码:`timescale1ns/1nsmodulemux4_1(input[1:0]d1,d2,d3,d0,input[1:0]sel,output[1:0]mux_out);//*************code***********//reg[1:0]mux_out_tmp;always@(*)begin......
  • 牛客小白月赛73
    A最小的数字#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);intn;cin>>n;cout<<((n+2ll)/3ll)*3ll<<"\n";......
  • 牛客想开了大赛2 题解
    题目链接:https://ac.nowcoder.com/acm/contest/907#question A.【六】平面公式:(n*n+n)/2+1,n为直线数目B.【一】n的约数枚举质因子和每个质因子的个数,显然个数肯定从多到少。#include<bits/stdc++.h>typedeflonglongll;usingnamespacestd;constintmx=1e4+10;in......
  • 牛客小白月赛73
    A.最小的数字题目:分析:简单枚举一下,找到第一个大于等于n的且是3的倍数的数代码:#include<bits/stdc++.h>usingnamespacestd;intmain(){intn;cin>>n;boolloop=true;if(n%3==0)loop=false;while(lo......