目录
本篇博客对 Circuits 部分的组合逻辑前两节做答案和部分解析,一些比较简单的题目就直接给出答案,有些难度再稍作讲解,每道题的答案不一定唯一,可以有多种解决方案,欢迎共同讨论。
创建单个 D 触发器
module top_module (
input clk,
input d,
output reg q
);
always @(posedge clk) begin
q <= d;
end
endmodule
创建8位D触发器
module top_module (
input clk,
input [7:0] d,
output [7:0] q
);
always @(posedge clk) begin
q <= d;
end
endmodule
创建具有主动高同步复位功能的 8 D 触发器。所有 DFF 都应由 clk 的正边缘触发。
module top_module (
input clk,
input reset,
input [7:0] d,
output [7:0] q
);
always @(posedge clk) begin
if (reset) begin
q <= 'd0;
end
else begin
q <= d;
end
end
endmodule
创建具有主动高同步复位功能的 8 D 触发器。触发器必须重置为0x34而不是零。所有 DFF 都应由 clk 的负边沿触发。
module top_module (
input clk,
input reset,
input [7:0] d,
output [7:0] q
);
always @(negedge clk) begin
if (reset) begin
q <= 8'h34;
end
else begin
q <= d;
end
end
endmodule
创建具有有源高异步复位功能的 8 D 触发器。所有 DFF 都应由 clk 的正边缘触发。
module top_module (
input clk,
input areset,
input [7:0] d,
output [7:0] q
);
always @(posedge clk or posedge areset) begin
if (areset) begin
q <= 'd0;
end
else begin
q <= d;
end
end
endmodule
创建 16 D 触发器。有时,仅修改一组触发器的一部分是很有用的。字节使能输入控制在该周期内是否应写入 16 个寄存器中的每个字节。byteena[1] 控制上字节 d[15:8],而 byteena[0] 控制下字节 d[7:0]。复位是同步、低电平有效复位。所有 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) begin
q <= 'd0;
end
else if (byteena==2'b11) begin
q <= d;
end
else if (byteena==2'b10) begin
q[15:8] <= d[15:8];
end
else if (byteena==2'b01) begin
q[7:0] <= d[7:0];
end
end
endmodule
创建锁存器
module top_module (
input d,
input ena,
output q
);
always @(*) begin
if (ena) begin
q = d;
end
end
endmodule
异步复位
module top_module (
input clk,
input d,
input ar,
output q
);
always @(posedge clk or posedge ar) begin
if (ar) begin
q <= 'd0;
end
else begin
q <= d;
end
end
endmodule
同步复位
module top_module (
input clk,
input d,
input r,
output q
);
always @(posedge clk) begin
if (r) begin
q <= 'd0;
end
else begin
q <= d;
end
end
endmodule
根据电路图实现 Verilog 逻辑

module top_module (
input clk,
input in,
output out
);
wire a;
assign a = in ^ out;
always @(posedge clk) begin
out <= a;
end
endmodule
假设要为此电路实现分层 Verilog 代码,使用子模块的三个实例化,该子模块中包含触发器和多路复用器。为此子模块编写一个名为 top_module 的 Verilog 模块(包含一个触发器和多路复用器)。

module top_module (
input clk,
input L,
input r_in,
input q_in,
output reg Q
);
wire D;
assign D = L?r_in:q_in;
always @(posedge clk) begin
Q <= D;
end
endmodule
为该电路的一级编写一个名为top_module的Verilog模块,包括触发器和多路复用器。

module top_module (
input clk,
input w, R, E, L,
output Q
);
wire C,D;
assign C = E?w:Q;
assign D = L?R:C;
always @(posedge clk) begin
Q <= D;
end
endmodule
给定如图所示的有限状态机电路,假设D触发器在机器开始之前最初复位为零。

module top_module (
input clk,
input x,
output z
);
reg Q1,Q2,Q3;
wire D1,D2,D3;
assign D1 = x ^ Q1;
assign D2 = x & (~Q2);
assign D3 = x | (~Q3);
always @(posedge clk) begin
Q1 <= D1;
end
always @(posedge clk) begin
Q2 <= D2;
end
always @(posedge clk) begin
Q3 <= D3;
end
assign z = ~(Q1 | Q2 | Q3);
endmodule
实现 JK 触发器,真值表如下:

module top_module (
input clk,
input j,
input k,
output Q
);
always @(posedge clk) begin
if (~j & ~k) begin
Q <= Q;
end
else if (~j & k) begin
Q <= 'd0;
end
else if (j & ~k) begin
Q <= 'd1;
end
else if (j & k) begin
Q <= ~Q;
end
end
endmodule
上升沿检测:对输入信号打一拍,打一拍的信号取反与原信号相与就可以检测出上升沿
上升沿检测:对输入信号打一拍,打一拍的信号与原信号取反相与就可以检测出上升沿
module top_module (
input clk,
input [7:0] in,
output [7:0] pedge
);
reg [7:0] in_reg;
always @(posedge clk) begin
in_reg <= in;
end
always @(posedge clk) begin
pedge <= in & (~in_reg);
end
endmodule
对于 8 位矢量中的每个位,检测输入信号何时从一个时钟周期变为下一个时钟周期(检测任何边沿)。输出位应在0到1转换发生后设置周期。

module top_module (
input clk,
input [7:0] in,
output [7:0] anyedge
);
reg [7:0] in_reg;
always @(posedge clk) begin
in_reg <= in;
end
always @(posedge clk) begin
anyedge <= in ^ in_reg;
end
endmodule
对于 32 位矢量中的每个位,当输入信号在一个时钟周期内从 1 变为下一个时钟周期中的 0 时进行捕获。“捕获”意味着输出将保持1,直到寄存器复位(同步复位)。每个输出位的行为类似于SR触发器:输出位应设置为(至1)1,转换发生1至0后的周期。当复位为高电平时,输出位应在正时钟边沿复位(至0)。如果上述两个事件同时发生,则重置优先。在下面示例波形的最后4个周期中,“复位”事件发生比“set”事件早一个周期,因此这里没有冲突。

module top_module (
input clk,
input reset,
input [31:0] in,
output [31:0] out
);
reg [31:0] in_reg;
always @(posedge clk) begin
in_reg <= in;
end
always @(posedge clk) begin
if (reset) begin
out <= 'd0;
end
else begin
out <= ~in & in_reg | out;
end
end
endmodule
熟悉在时钟的上升沿或时钟的下降沿触发的。双边沿触发触发器在时钟的两个边沿触发。但是,FPGA没有双边触发触发器,并且@(posedge clk or negedge clk)是不能够被综合的。构建一个在功能上表现得像双边沿触发触发器的电路:

以下提供两种方法:
module top_module (
input clk,
input d,
output q
);
reg d1,d2;
always @(posedge clk) begin
d1 <= d;
end
always @(negedge clk) begin
d2 <= d;
end
assign q = clk?d1:d2;
endmodule
//second
module top_module (
input clk,
input d,
output q
);
reg q1,q2;
always @(posedge clk) begin
q1 <= d ^ q2;
end
always @(negedge clk) begin
q2 <= d ^ q1;
end
assign q = q1 ^ q2;
endmodule
这部分的内容比较简单,主要就是学习了创建触发器和锁存器,以及在实际设计中常用的边沿检测。
一.面试总结 4月20号下午进行了一场大数据视频面试,总结一下踩坑点: 1.确定面试后,第一件事要和HR确定面试方式,具体时间、地点、什么软件、岗位JD等必须信息。 这里很多人有一个思想误区,认为问的太多会给HR不好的印象;其实大可不必,如果你通过了简历筛选,你就有权力使用公司招聘的人力资源。 2.要在面试10分钟前就进入面试的环境中,以防突发事件。 3.面试最开始都会有一个自我介绍环节,这个自我介绍环节,一定要慎之又慎,最好写下来,让朋友、长辈等审核多遍。 注:我面试时,在这踩了一个坑,自我介绍的时候踩了我要面试的岗位一脚,被技术面试官抓住了这一点
贪心算法特点从局部最优解推出全局最优,并且想不出来反例。贪心没有明确有规律的套路,而对于贪心的难题,更多的是难在思路上,要用一些转化问题的思维方法,然后,再根据局部最优解推出全局最优。参考文章:贪心算法理论基础1、发饼干先排序,按饼干从小到大的顺序,依次分给从小到大排序的小朋友。127、【贪心算法】leetcode——455.分发饼干:DFS+双指针法(C++版本)2、0水准线count用来记录当前子序列的相加和,当count大于0时,继续相加。当count小于或等于0时,重新开始选取子序列。以count是否为0判定的原因:若后续为正数时,没有这个负数更好,若后续为负数时,越加只会越小)129
目录前言: 案例1:案例2: 案例3:案例4:前言:一般我在刷leetcode题的时候既不喜欢在Playground也不喜欢在本地编译器里面打代码,而是直接在题目后的窗口里写代码。于是对于我这种氪不起金的玩家来说,经常就会出现奇怪的bug,找了半天也找不到。这里就对以前遇到过的问题进行总结。 案例1:我找了老半天问题在哪里。发现不管在for循环后面加什么语句都会出错。最后放到visualstudio里面才发现了错误。。。错误原因:c++注释行尾的反斜杠会将下一行也注释掉(即连接本行与下一行)!解决办法:避免注释行末尾出现\(除非故意的)总结:不得不承认有时不屑一顾的小基础能够在偶然的时候把自己
✨✨【Java牛客&力扣刷题特辑第五期】——诸佬们这些坑你们都踩过了吗?✔✨前言🎉🎉大家好!好久不见我是青花瓷,今天你刷题了吗?文章目录,从易到难,层层递进,如果每一道题都吃透,你一定会在做题方面有质的飞跃,关注我,一起学习算法,一起分享好的题型。博主将持续更新算法,大厂笔试题,经典算法题,易错题,如果觉得不错,点点赞支持一下,如果有错误的地方,欢迎指正✨✨下一期:算法篇之回溯算法作者介绍:🎓作者:偷偷敲代码的青花瓷✨👀作者的Gitee:代码仓库📌系列文章推荐:✨1.Java牛客&力扣刷题特辑第一期✨2.Java牛客&力扣刷题特辑第二期✨3.Java牛客&力扣刷题特辑第三期✨4.Java牛客&
个人名片:🐼作者简介:一名大二在校生🐻❄️个人主页:落798.🐼个人WeChat:落798.🕊️系列专栏:零基础学java-----重识c语言----计算机网络🐓每日一句:看淡一点在努力,你吃的苦会铺成你要的路!文章目录每日刷题30道1.如图所示是DHCP协议的运行过程,客户端从申请到获得IP地址的正确流程是哪一项?2.缺省情况下,OSPF外部路由属于以下哪一种类型?5.R1、R2、R3、R4运行OSPF,它们接口的DRPriority如图所示,假如设备同时启动,则_________被选举为DR。(请填写设备名称,例如R1)。6.以下关于IPv6重复地址检测的描述,错误的是哪一项?7.在WL
删列造序III题目描述给定由n个小写字母字符串组成的数组strs,其中每个字符串长度相等。选取一个删除索引序列,对于strs中的每个字符串,删除对应每个索引处的字符。比如,有strs=[“abcdef”,“uvwxyz”],删除索引序列{0,2,3},删除后为[“bef”,“vyz”]。假设,我们选择了一组删除索引answer,那么在执行删除操作之后,最终得到的数组的行中的每个元素都是按字典序排列的(即(strs[0][0]请返回answer.length的最小可能值。样例样例输入strs=[“babca”,“bbazb”]strs=[“edcba”]strs=[“ghi”,“def”,“ab
🥤🥤嗨嗨嗨!各位小伙伴们,我依旧是你们熟悉的那个……额,理想很远大,自己却很平凡,但一直努力的小白啦🤡。 🚈🚈那么最近呢,一直在不断更新C语言的知识点,那么大概在七月二十日左右,应该就会陆续更新java部分的知识点啦,毕竟C知识入门语言,把根基打牢,才能盖出属于自己的大楼🤟!! 🎋🎋好了,回归正题,今天要更新的就是一些我在C语言的学习过程的部分经典习题分享,还希望看完的小伙伴们一键三连,谢谢啦 🥞! 正文开始:目录一、经典垃圾代码二、虾仁猪心 三、X形图案四、获得月份天数五、逆序输出一个字符串的内容六、计算求和七、打印菱形一、经典垃圾代码🍎首先先看一个经典的例子:#includeintmain
使用了这个问答工具后,感觉前后端都要被替代了,太强了。由于本人之前很想体验,但是一直难搞,最近发现了一个免梯子的,重要事情说一遍,免梯子!是我最近发现的最好用,最快的,且不要梯子的,用起来爽,界面也挺好看的,大家快玩儿玩儿。试了一下写代码,写文案……真棒。特别适合最近在刷题准备面试的小伙伴,将成为你有力的帮手,有些问题可以直接问答案。快速入口话不多说先上图详细入口查看图片一、功能介绍1、技术学习我试了一下写代码并成功实现功能呢!js用两个栈实现队列并代码注释(这是gpt给的),还给了注释constructor(){ //初始化两个空栈 this.stack1=[]; this.stack
目录写在前面:题目:P1332血色先锋队-洛谷|计算机科学教育新生态(luogu.com.cn) 题目描述: 输入格式: 输出格式: 输入样例: 输出样例:解题思路:代码:AC!!!!!!!!!!写在最后:写在前面:怎么样才能学好一个算法?我个人认为,系统性的刷题尤为重要,所以,为了学好广度优先搜索,为了用好搜索应对蓝桥杯,事不宜迟,我们即刻开始刷题!题目:P1332血色先锋队-洛谷|计算机科学教育新生态(luogu.com.cn)题目描述:输入格式:第 1 行:四个整数 n,m,a,b,表示军团矩阵有 n 行 m 列。有
01背包概念:有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i]weight[i]weight[i],得到的价值是value[i]value[i]value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。方法1:暴力回溯法方法2:动态规划三个物品,物品的重量分别为{1,3,4},物品的价值分别为{15,20,30};背包最大容量为4。(一)二维dp数组确定dp数组以及下标的含义:dp[i][j]dp[i][j]dp[i][j]代表从下标为[0,i]的物品中任意取,放到容量为j的背包里,价值总和最大是多少。确定递推公式不放物品i的最大价值:dp[i