HDL-Bits 刷题记录 02

简介: HDL-Bits 刷题记录 02

Dff16e

16 个 D 触发器。有时只修改一组触发器的一部分。
字节使能输入控制 16 个寄存器中的每个字节是否应在该周期写入。byteena[1]控制高字节d[15:8],而byteena[0]控制低字节d[7:0]。
resetn是一个同步的低电平有效复位。
所有 DFF 都应由clk的上升沿触发。

module top_module (
    input clk,
    input resetn,
    input [1:0] byteena,
    input [15:0] d,
    output [15:0] q
);
    always @(posedge clk)begin
        if(!resetn)
            q <= 16'd0;
        else begin
            case (byteena)
            2'b10:
                q <= (q&16'h00FF)|(d&16'hFF00);
            2'b11:
                q <= d;
            2'b01: 
                q <= (q&16'hFF00)|(d&16'h00FF);
            2'b00: 
                q <= q;
            default: q <= q;
            endcase
            
        end
    end
endmodule

m2014 q4a

写一个D锁

module top_module (
    input d, 
    input ena,
    output q);
    always@(*)begin
        if(ena)
            q=d;
    end
endmodule

m2014 q4b

实现下图
m2014_q4b.png

module top_module (
    input clk,
    input d, 
    input ar,   // asynchronous reset
    output q);
    always@(posedge clk or posedge ar) begin
        if(ar)
            q <= 1'b0;
        else begin
            q <= d ;
        end

    end
endmodule

m2014 q4c

m2014_q4c.png

module top_module (
    input clk,
    input d, 
    input r,   // synchronous reset
    output q);
    always@(posedge clk ) begin
        if(r)
            q <= 1'b0;
        else begin
            q <= d ;
        end

    end
endmodule

m2014 q4d

m2014_q4d.png

module top_module (
    input clk,
    input in, 
    output out);
    //reg out1 ;
    //assign out = out1;
    always@(posedge clk) begin
        out <= out ^ in;
    end
endmodule

Mt2015 muxdff

假设您要为此电路实现分层 Verilog 代码,使用其中具有触发器和多路复用器的子模块的三个实例化。
包含一个触发器和多路复用器
Mt2015_muxdff.png

他就要一个多路复用器和触发器的拼接底层块 以上

module top_module (
    input clk,
    input L,
    input r_in,
    input q_in,
    output reg Q);
    wire temp;
    assign temp=L?r_in:q_in;
    always@(posedge clk)begin
        Q=temp;
    end
 endmodule

Exams/2014 q4a

也是要一个子模块
Exams_2014_q4a.png

module top_module (
    input clk,
    input w, R, E, L,
    output Q
);
wire sel1,sel2;
assign  sel1 = E?w:Q;
assign  sel2 = L?R:sel1;
always @(posedge clk) begin
    Q =sel2;
end
endmodule

ece241 2014 q4

module top_module (
    input clk,
    input x,
    output z
); 
wire d1,d2,d3;
wire q1,q2,q3;
assign z = ~(q1|q2|q3);
assign d1 = x^q1;
assign d2 = x&(~q2);
assign d3 = x|(~q3);
always@(posedge clk) begin
    q1 <= d1;
    q2 <= d2;
    q3 <= d3;
end
endmodule

ece241 2013 q7

JK 触发器 真值表

J K Q
0 0 Qold
0 1 0
1 0 1
1 1 ~Qold
module top_module (
    input clk,
    input j,
    input k,
    output Q); 
always @ (posedge clk)begin
    if (j^k) 
        Q = j;
    else if (j)
        Q = ~Q;
    else
        Q = Q;
end
endmodule

Edgedetect

8位上升沿检测

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] pedge
);

reg [7:0] in_past;
genvar i;
generate
    for(i = 0;i<8;i++) begin:edgedetect
        always@(posedge clk) begin
            if(in[i]==1&&in_past[i]==0)
                pedge[i] <= 1'b1;
            else 
                pedge[i] <= 1'b0;
        end
    end
endgenerate

always @(posedge clk) begin
    in_past <= in;
end 

endmodule

Edgedetect2

双边检测 8位

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] anyedge
);

reg [7:0] in_past;
genvar i;
generate
    for(i = 0;i<8;i++) begin:edgedetect
        always@(posedge clk) begin
            if(in[i]^in_past[i])
                anyedge[i] <= 1'b1;
            else 
                anyedge[i] <= 1'b0;
        end
    end
endgenerate

always @(posedge clk) begin
    in_past <= in;
end 

endmodule

Edgecapture

边沿检测,触发之后 不复位不清零

module top_module (
    input clk,
    input reset,
    input [31:0] in,
    output [31:0] out
);

    reg [31:0] in_past;
genvar i;
generate
    for(i = 0;i<32;i++) begin:edgedetect
        always@(posedge clk) begin
            if(reset)
                out[i]<= 1'd0;
            else if(in[i]==0&&in_past[i]==1&&out[i]==0)
                out[i] <= 1'b1;
            else if(out[i]==1'b1)
                out[i]<=1'b1;
            else
                out[i] <= 1'b0;
        end
    end
endgenerate

always @(posedge clk) begin
    in_past <= in;
end 

endmodule

Dualedge

构建一个双边触发器。逻辑如下:
Dualedge.png

module top_module (
    input clk,
    input d,
    output q
);
    reg q1,q2;
    always@(posedge clk) begin
        q1<=d;
    end
    always@(negedge clk) begin
        q2<=d;
    end
    assign q = clk?q1:q2;
endmodule

Counters

Count15

构建一个从 0 到 15(含)计数的 4 位二进制计数器,周期为 16。复位输入是同步的,应将计数器复位为 0。

module top_module (
    input clk,
    input reset,      // Synchronous active-high reset
    output [3:0] q);
    reg [4:0] cnt_reg = 0;
    assign q = cnt_reg;
    always @ (posedge clk) begin
        if(reset)
            cnt_reg <= 0;
        else if(cnt_reg <15)
            cnt_reg <= cnt_reg + 1;
        else 
            cnt_reg <= 0;
    end

endmodule

Count10

构建一个从 0 到 9(含)计数的十进制计数器,周期为 10。复位输入是同步的,应将计数器复位为 0。

module top_module (
    input clk,
    input reset,        // Synchronous active-high reset
    output [3:0] q);
    reg [3:0] cnt_reg = 0;
    assign q = cnt_reg;
    always @ (posedge clk) begin
        if(reset)
            cnt_reg <= 0;
        else if(cnt_reg <9)
            cnt_reg <= cnt_reg + 1;
        else 
            cnt_reg <= 0;
    end
endmodule

Count1to10

制作一个从 1 到 10 的十年计数器,包括 1 到 10。复位输入是同步的,应将计数器复位为 1。

module top_module (
    input clk,
    input reset,
    output [3:0] q);
    reg [3:0] cnt_reg = 1;
    assign q = cnt_reg;
    always @ (posedge clk) begin
        if(reset)
            cnt_reg <= 1;
        else if(cnt_reg <10)
            cnt_reg <= cnt_reg + 1;
        else 
            cnt_reg <= 1;
    end
endmodule

Countslow

构建一个从 0 到 9 计数的十进制计数器,周期为 10。复位输入是同步的,应该将计数器复位为 0。我们希望能够暂停计数器,而不是总是在每个时钟周期递增,所以slowena输入指示计数器何时应该增加

module top_module (
    input clk,
    input slowena,
    input reset,
    output [3:0] q);
    reg [3:0] cnt_reg = 0;
    assign q = cnt_reg;
    always @ (posedge clk) begin
        if(reset)
            cnt_reg <= 0;
        else if(!slowena)
            cnt_reg <= cnt_reg;
        else if(cnt_reg <9)
            cnt_reg <= cnt_reg + 1;
        else 
            cnt_reg <= 0;
    end
endmodule

ece241 2014 q7a

设计一个具有以下输入和输出的 1-12 计数器:

  • 复位同步高电平有效复位,强制计数器为 1
  • 启用设置高以使计数器运行
  • Clk正边沿触发时钟输入
  • Q[3:0]计数器的输出
  • c_enable, c_load, c_d[3:0]控制信号进入提供的 4 位计数器,因此可以验证正确的操作。

module count4(

input clk,
input enable,
input load,
input [3:0] d,
output reg [3:0] Q

);
fxxk ,题目看不懂 ,按照时序硬写的,过了 不知道他想要啥鬼东西

module top_module (
    input clk,
    input reset,
    input enable,
    output [3:0] Q,
    output c_enable,
    output c_load,
    output [3:0] c_d
); //   
    assign c_enable = enable;
    assign c_load = reset?1:(enable?c_load_reg:0);
    reg [3:0] cnt_reg = 1;
    reg c_load_reg ;
    assign Q = cnt_reg;
    assign c_d = c_load?1:0;
    always @ (posedge clk) begin
        if(reset) begin
            cnt_reg <= 1;
            c_load_reg <= 0;
        end
        else if(!enable) begin
            cnt_reg <= cnt_reg;
            if(cnt_reg ==12)
                c_load_reg <= 1;
            else 
                c_load_reg <= 0;
        end
        else if(cnt_reg <11) begin 
            cnt_reg <= cnt_reg + 1;
            c_load_reg <= 0;
        end
        else if(cnt_reg =11) begin 
            cnt_reg <= cnt_reg + 1;
            c_load_reg <= 1;
        end
        else    begin 
            cnt_reg <= 1;
            c_load_reg <= 0;
        end
    end
    
    count4 the_counter (clk, c_enable, c_load, c_d);

endmodule
目录
相关文章
|
安全 Linux 网络安全
Vivado 2017.04版本安装教程
Vivado 2017.04版本安装教程
1668 0
|
Linux 数据安全/隐私保护 Perl
bpf对内核的观测
bpftrace 可以对线上项目的系统调用的函数的进行观测,对观测的结果做出分析
524 0
|
11月前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
894 6
|
SQL 存储 XML
常见Web漏洞分析与防范研究
在以上内容中,结合OWASP、Toptal和Brightsec等权威来源的信息,确保回答的专业性和准确性。通过图表和思维导图的方式,可以更系统地了解和记忆Web安全知识,帮助企业在实际应用中更好地防范各种安全威胁。
643 13
|
设计模式 架构师 数据建模
DDD建模系列(四)
DDD建模系列(四)
DDD建模系列(四)
|
SQL 关系型数据库 MySQL
解决 MySQL 5.7 及以上版本中的 “ONLY_FULL_GROUP_BY“ 错误
解决 MySQL 5.7 及以上版本中的 “ONLY_FULL_GROUP_BY“ 错误
2426 3
|
存储 关系型数据库 MySQL
XtraBackup 的版本大揭秘:突破迷雾,揭开其支持 MySQL 版本的震撼真相,捍卫数据安全!
【8月更文挑战第7天】XtraBackup 是 MySQL 备份领域的热门工具,适用于多个版本。它为 MySQL 8.0 提供高效备份,确保数据安全。同样支持 MySQL 5.7 和其他稳定版如 5.6,精确备份各类数据结构。
360 0
树莓派换源教程 树莓派4B换源教程
树莓派换源教程 树莓派4B换源教程
1195 2
|
异构计算 SoC
最详细手把手教你安装 Vivado2019.2
最详细手把手教你安装 Vivado2019.2
1896 0
|
存储 测试技术 异构计算
HDL-Bits 刷题记录 01
HDL-Bits 刷题记录 01
713 0
HDL-Bits 刷题记录 01