- 博客(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
2941
原创 Verilog同步复位和异步复位
同步和异步是针对时钟信号而言的。以时钟上升沿触发的同步复位和异步复位为例。同步复位需要一个reset的输入,可以规定在reset为1时复位。但在同步复位的条件下,并不是reset变成1之后马上就能复位,而是要等到下一个时钟上升沿,此时才能复位。异步复位也需要一个reset的输入,我们也规定在reset为1时复位。在异步复位的条件下,reset变成1之后(即reset的上升沿)立刻就能复位,并不需要等到下一个时钟上升沿。module top_module ( input clk, inp
2022-04-26 16:20:10
4009
原创 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
3465
原创 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
701
原创 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
5649
原创 Verilog按位运算和逻辑运算
或运算符(|),与运算符(&)使用按位运算和逻辑运算的写法不同。以或运算符为例。按位或为(|),逻辑或为(||)。特别注意,按位取反为(~),逻辑取反为(!)上方为按位或,将ab两个向量进行按位或运算。中间为逻辑或,ab两个向量自己会先进行每位的或运算并分别得到一个一位的值,再进行逻辑或。...
2022-04-18 16:58:49
4974
2
原创 While和for的区别
对于while和for一直混在一起使用。For的使用太多以至于忘记while也很重要。同样作为循环结构,两者的一个重要区别在于是否确定循环次数。For循环规定了变量的起始和终止以及变化条件,这意味着我们可以确定循环的次数。例如从1到100进行for循环,每次自加1,那么可以确定循环次数为100次。While循环只规定终止条件,因此不需要确定循环次数。Leetcode中求最后一个单词长度。我们无法得知最后一个字母会出现在何处,但是我们知道循环结束条件是循环项为空格,因此只能使用while循环。clas
2022-04-07 16:55:43
6007
原创 二分法(移位运算>>)(python)
学习leetcode-搜索插入位置使用二分法查找目标值并插入对应有序列表。该经典算法印象中由牛顿最先使用,流程为:从列表首尾开始建立左右指针,每次索引折中,对比折中的值和目标值。如果小于目标值,那么目标值一定在折中值右边,因此左指针赋值为折中值+1,否则目标值一定在折中值左边,因此右指针赋值为折中值-1。其中折中有两种方式计算,一种就是简单的除以二后取整。对于严格升序列表(不存在重复元素)向上向下取整都可以。另一种折中方式为移位。这里需要除以2,因此使用右移位。通过移位来实现除法显然是基于二进制。例
2022-04-02 11:58:23
1620
原创 暴力匹配(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
394
原创 马尔科夫链(Markov chain, Markov model)讲解(一阶和高阶)及其应用(建模数据预测)
本文简单讲解其概念(包括一阶,二阶和高阶链)及应用(如何通过建模进行数据预测)
2022-04-01 15:42:02
13086
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
1042
原创 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
985
原创 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
4811
原创 栈(python里pop和push的用法)
学习Leetcode-有效的括号。数据结构中的栈,特性为后入先出。最后进入栈的元素将位于栈顶。栈有两个基础操作,pop和push。Push将元素压到栈顶,pop将栈顶元素从栈弹出。使用python进行栈操作如果我们把一个python列表看作一个栈,且列表末尾为栈顶。那么我们可以使用list.append来为实现push操作(为栈顶添加元素)。使用内置的pop函数来弹出栈顶元素。基本思路:每遇到一个左括号就将其压入栈,每遇到一个右括号就和栈顶元素匹配,如果匹配成功则栈顶元素弹出。判断结果为:当循环完
2022-03-29 17:23:09
13054
原创 微信小程序-保持登录(wx.checkSession)
正如浏览器使用cookie功能一样,在微信小程序中,也需要保持用户的登录状态。由于小程序本身没有cookie,则使用自身的storage来储存用户的session ID信息。使用的逻辑和cookie一样:当用户每次向服务器发送请求时,都带上这个session参数,由于小程序和服务器都存有相同的session,用户就保持了登录状态,直到服务器发现session过期,并要求用户重新登录。我们可以类比这样一种场景。一个客户第一次走进一座写字楼,前台帮助他办理了门禁卡,并设置了门禁卡的有效期限。当客户之后再次进
2022-03-23 14:52:24
4737
原创 微信小程序-登录(wx.login)
用户微信登录小程序有两种情况,分别为弹出登录提示和不弹出登录提示两种。弹出登录提示的情况下,用户确定后会向后台传入更多参数,例如用户昵称等。不弹出登录提示只能获取到用户的临时登录凭证code。主要根据第二种情况进行描述。这个code具有时效性,能用于区别用户,需要从小程序前端传到开发者服务器后端,再从后端传到微信服务器进行核验,来获取用户唯一标识openid和会话密钥 session_key。对于小程序前端,所需要做的只有通过wx.login获取到code,并通过wx.request将code发送给开发
2022-03-22 14:24:06
15508
原创 微信小程序-支付(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
12439
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人