自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 Verilog generate批量实例化

使用generate-for批量实例化。首先需要用genvar关键字定义for语句的变量。且该for语句必须有一个名字,这里为adder100。批量实例化100个二进制加法器。module top_module( input [99:0] a, b, input cin, output [99:0] cout, output [99:0] sum ); genvar i; generate for(i=0;i<100;i++) begin:

2022-04-29 15:59:04 2608

原创 Verilog同步复位和异步复位

同步和异步是针对时钟信号而言的。以时钟上升沿触发的同步复位和异步复位为例。同步复位需要一个reset的输入,可以规定在reset为1时复位。但在同步复位的条件下,并不是reset变成1之后马上就能复位,而是要等到下一个时钟上升沿,此时才能复位。异步复位也需要一个reset的输入,我们也规定在reset为1时复位。在异步复位的条件下,reset变成1之后(即reset的上升沿)立刻就能复位,并不需要等到下一个时钟上升沿。module top_module ( input clk, inp

2022-04-26 16:20:10 3755

原创 Verilog溢出

对于有符号数,最高位是其符号位。将两个位长相同的有符号数加减,产生溢出只会有两种情况。1.两个正数相加。正数的符号位为0,产生溢出时符号位会变成1,此时溢出位置1。2.两个负数相加。负数的符号位为1,产生溢出时符号位会变成0,此时溢出位置1。。使用verilog设计module top_module ( input [7:0] a, input [7:0] b, output [7:0] s, output overflow); // assign s = a

2022-04-25 15:55:46 2848

原创 Verilog中case语句的逆向使用

当case表达式的值和分支条件的值相等时,进入相应分支。通常使用case语句时,我们把一个变量写在case表达式中,而把常量写在分支下,例如写一个四选一的选择器。input [1:0]sel,output reg [3:0]dout );always@(*)begin case(sel) 2'b00:begin dout = 4'b0000; end 2'b01:begin dout =

2022-04-22 16:31:30 530

原创 Verilog创建子模块并调用

创建子模块并调用module top_module( input x, input y, output z); wire o1, o2, o3, o4; A ia1 (x, y, o1); B ib1 (x, y, o2); A ia2 (x, y, o3); B ib2 (x, y, o4); assign z = (o1 | o2) ^ (o3 & o4); // Or you could simplify the circuit including the s

2022-04-20 11:31:34 4946

原创 Verilog按位运算和逻辑运算

或运算符(|),与运算符(&)使用按位运算和逻辑运算的写法不同。以或运算符为例。按位或为(|),逻辑或为(||)。特别注意,按位取反为(~),逻辑取反为(!)上方为按位或,将ab两个向量进行按位或运算。中间为逻辑或,ab两个向量自己会先进行每位的或运算并分别得到一个一位的值,再进行逻辑或。...

2022-04-18 16:58:49 4454 2

原创 While和for的区别

对于while和for一直混在一起使用。For的使用太多以至于忘记while也很重要。同样作为循环结构,两者的一个重要区别在于是否确定循环次数。For循环规定了变量的起始和终止以及变化条件,这意味着我们可以确定循环的次数。例如从1到100进行for循环,每次自加1,那么可以确定循环次数为100次。While循环只规定终止条件,因此不需要确定循环次数。Leetcode中求最后一个单词长度。我们无法得知最后一个字母会出现在何处,但是我们知道循环结束条件是循环项为空格,因此只能使用while循环。clas

2022-04-07 16:55:43 5841

原创 二分法(移位运算>>)(python)

学习leetcode-搜索插入位置使用二分法查找目标值并插入对应有序列表。该经典算法印象中由牛顿最先使用,流程为:从列表首尾开始建立左右指针,每次索引折中,对比折中的值和目标值。如果小于目标值,那么目标值一定在折中值右边,因此左指针赋值为折中值+1,否则目标值一定在折中值左边,因此右指针赋值为折中值-1。其中折中有两种方式计算,一种就是简单的除以二后取整。对于严格升序列表(不存在重复元素)向上向下取整都可以。另一种折中方式为移位。这里需要除以2,因此使用右移位。通过移位来实现除法显然是基于二进制。例

2022-04-02 11:58:23 1544

原创 暴力匹配(python)

学习leetcode。暴力匹配字符串A中是否有另一字符串B。暴力匹配的核心思想在于,如果能B能匹配到A,那么需要对A进行窗口滑动,且窗口长度为B的长度。那么应该使用两层循环,第一层对A进行窗口滑动,从A的开头一直遍历到len(A)-len(B)。第二层遍历为窗口内部遍历,窗口内部(这里的index是绝对位置,因此需要两层循环的索引相加)和B进行匹配,匹配不上直接进入下一个外层循环。class Solution: def strStr(self, haystack: str, needle: s

2022-04-01 16:09:23 343

原创 马尔科夫链(Markov chain, Markov model)讲解(一阶和高阶)及其应用(建模数据预测)

本文简单讲解其概念(包括一阶,二阶和高阶链)及应用(如何通过建模进行数据预测)

2022-04-01 15:42:02 9923 15

原创 Python实现双指针直接对列表修改

双指针可以用于直接对列表进行修改。以leetcode中两道题:删除有序数组中的重复项和移除元素为例。要求都是直接修改给定数组,并返回处理后的数组长度x。检测时只检测数组的前x项。移除元素的代码如下:class Solution: def removeElement(self, nums: List[int], val: int) -> int: left = 0 for i in range(len(nums)): if nums[i

2022-04-01 10:08:24 977

原创 Python实现单链表

在leetcode遇到单链表感到疑惑,于是用python自行实现该操作。使用python单链表数据结构为class Node: def __init__(self, data=None, next=None): self.data = data self.next = next可以定义出一条单链表node1-node2-node3node1 = Node(data=1)node2 = Node(data=2)node3 = Node(data=3)no

2022-04-01 09:53:42 953

原创 Windows 批量处理bat(修改文件名为当天日期并复制或剪切到指定跨磁盘目录)

需要将一个文件重命名为当天日期,并每天自动剪切到指定目录(可以跨磁盘)。以处理一张图片为例。将该图片更名为日期,并从D盘目录剪切到C盘指定目录。将2.jpg文件和该bat文件置于同一目录下。set oldName=2.jpgset newName=%date:~0,10%ren %oldName% %newName:/=-%.jpgset sourceDir=D:\123%newName:/=-%.jpgset targetDir=C:\123xcopy /s /e /i /y %source

2022-03-30 11:23:10 4428

原创 栈(python里pop和push的用法)

学习Leetcode-有效的括号。数据结构中的栈,特性为后入先出。最后进入栈的元素将位于栈顶。栈有两个基础操作,pop和push。Push将元素压到栈顶,pop将栈顶元素从栈弹出。使用python进行栈操作如果我们把一个python列表看作一个栈,且列表末尾为栈顶。那么我们可以使用list.append来为实现push操作(为栈顶添加元素)。使用内置的pop函数来弹出栈顶元素。基本思路:每遇到一个左括号就将其压入栈,每遇到一个右括号就和栈顶元素匹配,如果匹配成功则栈顶元素弹出。判断结果为:当循环完

2022-03-29 17:23:09 11580

原创 微信小程序-保持登录(wx.checkSession)

正如浏览器使用cookie功能一样,在微信小程序中,也需要保持用户的登录状态。由于小程序本身没有cookie,则使用自身的storage来储存用户的session ID信息。使用的逻辑和cookie一样:当用户每次向服务器发送请求时,都带上这个session参数,由于小程序和服务器都存有相同的session,用户就保持了登录状态,直到服务器发现session过期,并要求用户重新登录。我们可以类比这样一种场景。一个客户第一次走进一座写字楼,前台帮助他办理了门禁卡,并设置了门禁卡的有效期限。当客户之后再次进

2022-03-23 14:52:24 4171

原创 微信小程序-登录(wx.login)

用户微信登录小程序有两种情况,分别为弹出登录提示和不弹出登录提示两种。弹出登录提示的情况下,用户确定后会向后台传入更多参数,例如用户昵称等。不弹出登录提示只能获取到用户的临时登录凭证code。主要根据第二种情况进行描述。这个code具有时效性,能用于区别用户,需要从小程序前端传到开发者服务器后端,再从后端传到微信服务器进行核验,来获取用户唯一标识openid和会话密钥 session_key。对于小程序前端,所需要做的只有通过wx.login获取到code,并通过wx.request将code发送给开发

2022-03-22 14:24:06 14866

原创 微信小程序-支付(wx.requestPayment)

直接调用的接口为wx.requestPayment。官方文档的请求例子为:wx.requestPayment({“timeStamp”:"",“nonceStr”: “”,“package”: “”,“signType”: “MD5”,“paySign”: “”,“success”:function(res){},“fail”:function(res){},“complete”:function(res){}})其中paySign官方文档给出了一个例子:MD5(appId=wx

2022-03-22 10:34:28 11775 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除