首页 > 其他分享 >【HDLBits刷题笔记】11 Shift Regiters&More Circuits

【HDLBits刷题笔记】11 Shift Regiters&More Circuits

时间:2022-10-31 12:22:04浏览次数:87  
标签:11 LEDR Regiters Circuits clk module KEY output input

Shift4

异步复位同步置数和使能。

module top_module(
    input clk,
    input areset,  // async active-high reset to zero
    input load,
    input ena,
    input [3:0] data,
    output reg [3:0] q); 
    always@(posedge clk or posedge areset)
    begin
        if(areset)
            q <= 'd0;
        else if(load)
            q <= data;
        else if(ena)
            q <= {1'b0,q[3:1]};
    end

endmodule

Rotate100

循环移位,通过ena信号控制左移和右移。

module top_module(
    input clk,
    input load,
    input [1:0] ena,
    input [99:0] data,
    output reg [99:0] q); 
    always@(posedge clk)
    begin
        if(load)
            q <= data;
        else if(ena == 2'b01)
            q <= {q[0],q[99:1]};
        else if(ena == 2'b10)
            q <= {q[98:0],q[99]};
    end
endmodule

Shift18

算数移位,注意右移的时候保留符号位,左移正常移位就可以,注意8{q[63]}外面要再加一个大括号。

module top_module(
    input clk,
    input load,
    input ena,
    input [1:0] amount,
    input [63:0] data,
    output reg [63:0] q); 
    always@(posedge clk)
    begin
        if(load)
            q <= data;
        else if(ena) begin
            case(amount)
                2'b00: q <= {q[62:0],1'b0};
                2'b01: q <= {q[55:0],8'b0};
                2'b10: q <= {q[63],q[63:1]};
                2'b11: q <= {{8{q[63]}},q[63:8]};
            endcase
        end
    end
endmodule

Lfsr5

题目给的答案把组合逻辑和时序逻辑分开了,看起来思路会更清晰。

module top_module(
    input clk,
    input reset,    // Active-high synchronous reset to 5'h1
    output reg[4:0] q
); 
    always@(posedge clk)
    begin
        if(reset)
            q <= 5'h1;
        else begin
            q[0] <= q[1];
            q[1] <= q[2];
            q[2] <= q[3]^q[0];
            q[3] <= q[4];
            q[4] <= 1'b0^q[0];
        end
    end
endmodule

Mt2015 lfsr

把之前写的muxdff例化一下就可以了,注意如果是在顶层是不推荐有逻辑的,逻辑可以纳入子模块中,可以更好的优化。

module top_module (
    input [2:0] SW,      // R
    input [1:0] KEY,     // L and clk
    output [2:0] LEDR);  // Q
    muxdff u0(KEY[0],KEY[1],SW[0],LEDR[2],LEDR[0]);
    muxdff u1(KEY[0],KEY[1],SW[1],LEDR[0],LEDR[1]);
    muxdff u2(KEY[0],KEY[1],SW[2],LEDR[1]^LEDR[2],LEDR[2]);
endmodule

module muxdff (
    input clk,
    input L,
    input r_in,
    input q_in,
    output reg Q);
    always@(posedge clk)
    begin
        Q <= L?r_in:q_in;
    end
endmodule

Lfsr32

仿照Lfsr5写即可,注意位置是从1开始算的。

module top_module(
    input clk,
    input reset,    // Active-high synchronous reset to 32'h1
    output reg[31:0] q
); 
    reg [31:0]q_next;
    always@(*)
    begin
        q_next = q[31:1];
        q_next[31] = q[0];
        q_next[21] = q[0]^q[22];
        q_next[1] = q[0]^q[2];
        q_next[0] = q[0]^q[1];
    end
    
    always@(posedge clk)
    begin
        if(reset)
            q <= 32'h1;
        else
            q <= q_next;
    end

endmodule

Exams/m2014 q4k

module top_module (
    input clk,
    input resetn,   // synchronous reset
    input in,
    output out);
    reg [3:0]Q;
    always@(posedge clk)
    begin
        if(~resetn)
            Q <= 'd0;
        else 
            Q <= {in,Q[3:1]};
    end
    assign out = Q[0];
endmodule

Exams/2014 q4b

同样是例化之前写的MUXDFF。

module top_module (
    input [3:0] SW,
    input [3:0] KEY,
    output [3:0] LEDR
); //
    MUXDFF u3(KEY[0],LEDR[1],SW[0],KEY[1],KEY[2],LEDR[0]);
    MUXDFF u2(KEY[0],LEDR[2],SW[1],KEY[1],KEY[2],LEDR[1]);
    MUXDFF u1(KEY[0],LEDR[3],SW[2],KEY[1],KEY[2],LEDR[2]);
    MUXDFF u0(KEY[0],KEY[3],SW[3],KEY[1],KEY[2],LEDR[3]);
endmodule

module MUXDFF (
    input clk,
    input w, R, E, L,
    output Q
);
    always@(posedge clk)
    begin
        Q <= L?R:(E?w:Q);
    end
endmodule

Exams/ece241 2013 q12

3输入查找表,Xilinx的FPGA大多是基于6输入查找表构造的。

通过一个时序逻辑改变保存的值,再通过一个组合逻辑输出结果。

module top_module (
    input clk,
    input enable,
    input S,
    input A, B, C,
    output Z ); 
    reg [7:0]Q;
    always@(posedge clk)
    begin
        if(enable)
            Q <= {Q[6:0],S};
    end

    assign Z=Q[{A,B,C}];
endmodule
 

标签:11,LEDR,Regiters,Circuits,clk,module,KEY,output,input
From: https://www.cnblogs.com/magnolia666/p/16843865.html

相关文章

  • Educational Codeforces Round 110 (Rated for Div. 2) D
    D.PlayoffTournament观察完题发现没改变一个只会修改自己及以上的权值所以我们直接暴力qlogn但是这个题恶心的就是他那个是倒着给的我们要reverse一遍注意这时候......
  • TR-069第一期第六修正版-11
    3.4.5摘要认证DigestAuthentication本节概述了在CPEWAN管理协议中使用摘要认证的要求。这些要求适用于RPC交换和文件传输的连接验证。请注意,对于不同类型的连接,ACS和CP......
  • Windows11 22H2_22621.674_MVS_10月最新懒人版
    Moment1(Build22621.675)的功能更新根据微软官网介绍,总共6项新增功能:①资源管理器标签,类似于浏览器的标签,在以往的版本中这是一个隐藏功能,此前我已经给大家介绍了怎么开......
  • UVA11297 Census(kd-tree)
    题意:给定一个\(n\timesn\)的网格,要求支持修改和询问某个矩阵的最大值和最小值。解法多样,可以用二维线段树,我用的是\(kd-tree\)。那么这题就很裸了,我在这里只提几点需......
  • C++11绑定器bind及function机制
    前言之前在学muduo网络库时,看到陈硕以基于对象编程的方式,大量使用boost库中的bind和function机制,如今,这些概念都已引入至C++11,包含在头文件<functional>中。本篇文章主要......
  • 洛谷 P1153 点和线
    前置知识(1)求两条线段的交点方法1,运用高中的解析几何知识求.方法2,运用向量点积求.考虑向量叉乘。若\(\veca\times\vecb>0\),那么\(\vecb\)在\(\veca\)......
  • 11.异常处理与模块
    异常处理当检测到⼀个错误时,解释器就⽆法继续执⾏了,反⽽出现了⼀些错误的提示,这就是所谓的"异常"。python提供了两个非常重要的功能来处理python程序在运行中出现的异常......
  • 115.distinct-subsequence 不同的子序列
    问题描述115.不同的子序列解题思路dp[i][j]表示考虑考虑t的前j个字符在s的前i个字符中的出现个数:if(s[i-1]==t[j-1])dp[i][j]=dp[i-1][j-1]+dp[i-......
  • Python3.11正式版,它来了!
    转载请注明出处❤️作者:测试蔡坨坨原文链接:caituotuo.top/b055fbf2.html你好,我是测试蔡坨坨。就在前几天,2022年10月24日,Python3.11正式版发布了!Python官方在2020年1月......
  • Java 从入门到放弃11 - 《Maven》
    说点题外话,没想到突然又重拾更新,在这期间学习了java的许多知识,还补充了sql语句,数据库相关的内容,由于时间关系,中间部分的内容都没有做相应笔记和博客,因为sql的语句还有中间......