【牛客】1 基礎語法

来源:https://www.cnblogs.com/magnolia666/archive/2023/02/20/17138965.html
-Advertisement-
Play Games

VL1 四選一多路器 `timescale 1ns/1ns module mux4_1( input [1:0]d1,d2,d3,d0, input [1:0]sel, output [1:0]mux_out ); //*************code***********// assign mu ...


VL1 四選一多路器

`timescale 1ns/1ns
module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output [1:0]mux_out
);
//*************code***********//
assign mux_out = (sel==0)?d3:
                 ((sel==1)?d2:
                 ((sel==2)?d1:
                 d0));
//*************code***********//
endmodule

VL2 非同步複位的串聯T觸發器

題目已經提示了是兩個串聯的T觸發器,只要記得T觸發器在輸入高電平時,輸出翻轉即可。

`timescale 1ns/1ns
module Tff_2 (
input wire data, clk, rst,
output reg q  
);
//*************code***********//
reg q_r;
always@(posedge clk or negedge rst)
begin
    if(~rst) begin
        q_r <= 1'b0;
        q <= 1'b0;
    end
    else begin
        if(data)
            q_r <= ~ q_r;
        if(q_r)
            q <= ~q;
    end
end
//*************code***********//
endmodule

VL3 奇偶校驗

按位異或即可。

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
assign check = sel?(^bus):(~^bus);

//*************code***********//
endmodule

VL4 移位運算與乘法

寫完才看到要求用移位運算,不過也簡單,把乘法分解成移位相加即可。

註意把輸入的d先保存起來。

`timescale 1ns/1ns
module multi_sel(
input [7:0]d ,
input clk,
input rst,
output reg input_grant,
output reg [10:0]out
);
//*************code***********//
reg [1:0]state;
reg [7:0]d_r;
always@(posedge clk or negedge rst)
begin
    if(~rst)begin
        input_grant <= 1'b0;
        out <= 'd0;
        state <= 'd0;
        d_r <= 'd0;
    end
    else begin
        if(state == 0)begin
            input_grant <= 1'b1;
            out <= d;
            d_r <= d;
            state <= 1;
        end else if(state == 1)begin
            input_grant <= 1'b0;
            out <= 3 * d_r;
            state <= 2;
        end else if(state == 2)begin
            out <= 7 * d_r;
            state <= 3;            
        end else if(state == 3)begin
            out <= 8 * d_r;
            state <= 0;            
        end
    end
end

//*************code***********//
endmodule

VL5 位拆分與運算

在sel==0時把d保存起來。

`timescale 1ns/1ns

module data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,

output reg [4:0]out,
output reg validout
);
//*************code***********//
reg [15:0]d_r;
always@(*)
begin
    case(sel)
    0:begin
        validout=0;
        out=0;
    end
    1:begin
        validout=1;
        out=d_r[3:0]+d_r[7:4];
    end
    2:begin
        validout=1;
        out=d_r[3:0]+d_r[11:8];
    end
    3:begin
        validout=1;
        out=d_r[3:0]+d_r[15:12];
    end
    endcase
end

always@(posedge clk or negedge rst)
begin
    if(~rst)
        d_r <= 'd0;
    else begin if(sel == 0)
        d_r <= d;
    end
end

//*************code***********//
endmodule

VL6 多功能數據處理器

`timescale 1ns/1ns
module data_select(
    input clk,
    input rst_n,
    input signed[7:0]a,
    input signed[7:0]b,
    input [1:0]select,
    output reg signed [8:0]c
);
always@(posedge clk or negedge rst_n)
begin
    if(~rst_n)
    c=0;
    else begin
    case(select)
        0:c=a;
        1:c=b;
        2:c=a+b;
        3:c=a-b;
    endcase
    end
end
endmodule

VL7 求兩個數的差值

`timescale 1ns/1ns
module data_minus(
    input clk,
    input rst_n,
    input [7:0]a,
    input [7:0]b,

    output  reg [8:0]c
);
always@(posedge clk or negedge rst_n)
begin
    if(~rst_n)
        c <= 'd0;
    else begin
        if(a>b)
            c<=a-b;
        else
            c<=b-a;
    end
end
endmodule

VL8 使用generate…for語句簡化代碼

這道題要求使用generate for語句,這個和for迴圈並不相同,首先generate for必須要使用genvar定義索引變數,其次generate for可以用來將一個模塊例化多次,而for迴圈通常只是用於賦值。

這道題其實用for迴圈就夠了。

`timescale 1ns/1ns
module gen_for_module( 
    input [7:0] data_in,
    output [7:0] data_out
);
genvar i;
generate
for(i=0;i<8;i=i+1)begin 
    assign data_out[i]=data_in[7-i]; 
end
endgenerate
endmodule

VL9 使用子模塊實現三輸入數的大小比較

這題要求通過例化子模塊實現三個數的大小比較,又由於子模塊是時序邏輯,所以要經過兩次比較,延兩個周期。

`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
);
wire [7:0]temp1;
wire [7:0]temp2;
child_mod u0(
    .clk(clk),
    .rst_n(rst_n),
    .a(a),
    .b(b),
    .c(temp1)
);
child_mod u1(
    .clk(clk),
    .rst_n(rst_n),
    .a(a),
    .b(c),
    .c(temp2)
);
child_mod u2(
    .clk(clk),
    .rst_n(rst_n),
    .a(temp1),
    .b(temp2),
    .c(d)
);
endmodule

module child_mod(
    input clk,
    input rst_n,
    input [7:0]a,
    input [7:0]b,
    
    output reg [7:0]c 
);
always@(posedge clk or negedge rst_n)
begin
    if(~rst_n)
        c <= 'd0;
    else begin
        if(a<b)
            c<=a;
        else
            c<=b;
    end
end
endmodule

VL10 使用函數實現數據大小端轉換

這題要求用function,註意一下function怎麼寫就行了。

`timescale 1ns/1ns
module function_mod(
    input [3:0]a,
    input [3:0]b,
    
    output [3:0]c,
    output [3:0]d
);
function [3:0]convert;
input [3:0]in;
integer i;
for(i=0;i<4;i=i+1)begin
    convert[i] =in[3-i]; 
end
endfunction
assign c = convert(a);
assign d = convert(b);
endmodule

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JavaScript數組方法大全 趁著有時間,總結了下數組所有的屬性和方法,記錄博客,便於後續使用 at() at方法,用於獲取數組中,對應索引位置的值,不能修改。 語法:array.at(count); 參數:count,數組的索引值 返回值:返回該索引在數組中對應的值,如果count大於等於數組 ...
  • RegExp() 在es5中,RegExp的構造函數參數有兩種情況 1、字元串 2、正則表達式 // 第一種情況 let regex = new RegExp('abc', 'i') // 第二種情況 let regex2 = /abc/i 這兩種情況是等價的 let s = 'abc' regex ...
  • 在 HTML 中引入 JavaScript 文件時,可以使用 defer 屬性,該屬性可以推遲(defer)腳本的執行,即等到整個 HTML 文檔解析完畢後才執行腳本。 使用 defer 屬性可以避免在解析 HTML 文檔的過程中阻塞頁面的渲染,提高頁面載入的速度。 同時,defer 屬性還可以確保 ...
  • 在官方示例的沙盒裡寫東西是真方便 Cesium中有兩種對象可以添加到場景中,Entity、Primitive。Entity對用戶更友好,方便使用,但是靈活性和性能差一些。Primitive,支持自定義幾何形狀和幾何對象的材質,可以實現更複雜的效果。 1.polygon(面) var square = ...
  • 一、背景 遠程服務將電腦程式的工作範圍從單機擴展到網路,從本地延伸至遠程,是構建分散式系統的首要基礎。遠程服務調用(Remote Procedure Call,RPC)在電腦科學中已經存在了超過四十年時間。但很多人無法明確區分RPC與Rest。本文就講一講RPC和Rest的本質區別。 二、分析 ...
  • 談到java中的併發,我們就避不開線程之間的同步和協作問題,談到線程同步和協作我們就不能不談談jdk中提供的AbstractQueuedSynchronizer(翻譯過來就是抽象的隊列同步器)機制; (一)、AQS中的state和Node含義: AQS中提供了一個int volatile state ...
  • 導入依賴 <!--代碼生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> ...
  • SpringMVC執行流程 1.SpringMVC執行流程分析圖 例子 (1)創建 HaloHandler package com.li.web.debug; import org.springframework.stereotype.Controller; import org.springfra ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...