当前位置: 首页 > news >正文

网络前端开发招聘天津抖音seo

网络前端开发招聘,天津抖音seo,整个网站全部乱码,广州建设时时彩网站信号发生器 方波,就是一段时间内都输出相同的信号 锯齿波就是递增 三角波就是先增后减 加减计数器 当mode为1则加,Mode为0则减;只要为0就输出zero 这样会出问题,因为要求是十进制,但是这里并没有考虑到9之后怎么办&a…

 信号发生器

方波,就是一段时间内都输出相同的信号

 

锯齿波就是递增

三角波就是先增后减

加减计数器

当mode为1则加,Mode为0则减;只要为0就输出zero 

这样会出问题,因为要求是十进制,但是这里并没有考虑到9之后怎么办,所以就会使number输出超过9,应该额外要添加十进制的边缘判断,即mode为1,要加的时候也要判断一下是不是要继续加,而不是直接加

简易秒表

输出端口second为1~60,到60时,minute+1,分到60时,停止计数

秒的确定

分的确定

可置位计数器

就是有置位信号时,把当前数字置为要置的数字

然后要确定是十六进制

额外逻辑

串转并

输入端输入单位信号,累积到6个后,输出一个六位的信号

reg [5:0]       data_reg;reg [2:0]       data_cnt;always @(posedge clk or negedge rst_n ) beginif(!rst_n)ready_a <= 'd0;elseready_a <= 1'd1;endalways @(posedge clk or negedge rst_n ) beginif(!rst_n)data_cnt <= 'd0;else if(valid_a && ready_a)data_cnt <= (data_cnt == 3'd5) ? 'd0 : (data_cnt + 1'd1);endalways @(posedge clk or negedge rst_n ) beginif(!rst_n)data_reg <= 'd0;else if(valid_a && ready_a)data_reg <= {data_a, data_reg[5:1]};endalways @(posedge clk or negedge rst_n ) beginif(!rst_n)beginvalid_b <= 'd0;data_b <= 'd0;endelse if(data_cnt == 3'd5)beginvalid_b <= 1'd1;data_b <= {data_a, data_reg[5:1]};endelsevalid_b <= 'd0;end

数据累加输出

当接受到4个输入数据后,输出一个这四个数据的累加结果

`timescale 1ns/1nsmodule valid_ready(input 				clk 		,   input 				rst_n		,input		[7:0]	data_in		,input				valid_a		,input	 			ready_b		,output		 		ready_a		,output	reg			valid_b		,output  reg [9:0] 	data_out
);
reg 	[1:0]		data_cnt;assign ready_a = !valid_b | ready_b;always @(posedge clk or negedge rst_n ) beginif(!rst_n) data_cnt <= 'd0;else if(valid_a && ready_a)data_cnt <= (data_cnt == 2'd3) ? 'd0 : (data_cnt + 1'd1);
end
always @(posedge clk or negedge rst_n ) beginif(!rst_n) valid_b <= 'd0;else if(data_cnt == 2'd3 && valid_a && ready_a)valid_b <= 1'd1;else if(valid_b && ready_b)valid_b <= 1'd0;
endalways @(posedge clk or negedge rst_n ) beginif(!rst_n) data_out <= 'd0;else if(ready_b && valid_a && ready_a && (data_cnt == 2'd0))data_out <= data_in;else if(valid_a && ready_a)data_out <= data_out + data_in;endendmodule

非阻塞赋值,就是把次态给现态,就是说右侧的是次态,但是现在还不用,是下个状态的情况,那么条件判断里就是导致其进入下个状态的条件

非整数倍数据位宽转换24to128

数据位宽转换,24位转128位,先到的数据为高位

也是串转并的一种,只不过最后的时候是只要一部分

思路都是,先判断输入的有效性,有效时,就对数据暂存器做出改变;对于输出时,如果可以输出了,即让输出,就输出,没有使能,就不输出,依然暂存。

24和128的最小公倍数为384,所以每到384的时候,就是对齐了一次,即完成一次周期

所以每当cnt到5,10,15时,就需要输出一次,并拉高valid_out一个周期

简单的输入信号计数器,表示已经输入了几个24位的信号

数据暂存器,每当输入有效时,将数据从低位移入,注意是低位,而且是要在输入有效时操作

输出使能

需要注意的是,非阻塞是使的关系,即这个clk里收到了信号,但是并不在这个周期里即时发生改变,而是在下个clk里再发生改变,也就使得逻辑上同步的输入输出,不是在同一个周期上发生,而是先有输入,才有下个周期对应的输出,每个周期输出的都是上个周期的结果。当下输入的数据,在下个周期出结果

但在赋值时,由于是非阻塞,所以也是在给次态赋值,所以这个周期里干的事,都不是这个周期里的,而是去确定下个周期的,这个周期里的事都在上个周期里确定了;也就是说此时的条件都是下个周期的,而不是当下的。

所以写的时候,就不要想的是串行。而是想写的是一个一个模块,根据不同的输入给出不同的输出

就是注意

 先到的数据在高位,满的时候,先从高位出去,即FIFO。只是截取高位的时候,是从暂存器的低位开始截取的,也就是说,还是先进的最高位先出去;然后输出的时候,是先尝试输出再寄存,因为寄存的时候不管截不截取,它就是全部存进去。但是输出的时候,要判断并截取一部分新的

valid_in是判断当前的输出是不是有效,如果无效,即使输入了,要发生一些改变时,也不会

 

之前担心的是,如果能输出的时候,先在暂存器里输入了一遍,结果又在输入里输入了一遍

但实际上,这就是为什么要用非阻塞而不是阻塞。即各个模块都是并行的,都是并行的,即在这个时钟刻里,用的都是上个时间里的数值,而且不会发生改变。用非阻塞可以不用考虑这样的先后问题,如果是阻塞,就必须先尝试输出,才能暂存

用阻塞也会出问题,出时序问题,马丹

`timescale 1ns/1nsmodule width_24to128(input 				clk 		,   input 				rst_n		,input				valid_in	,input	[23:0]		data_in		,output	reg			valid_out	,output  reg [127:0]	data_out
);reg [3:0]   cnt;reg [127:0] data_lock;always@(posedge clk or negedge rst_n) beginif(~rst_n)cnt <= 0;elsecnt <= ~valid_in? cnt:cnt+1;endalways@(posedge clk or negedge rst_n) beginif(~rst_n)valid_out <= 0;elsevalid_out <= (cnt==5 || cnt==10 || cnt==15)&&valid_in;endalways@(posedge clk or negedge rst_n) beginif(~rst_n)data_lock <= 0;elsedata_lock <= valid_in? {data_lock[103:0], data_in}: data_lock;endalways@(posedge clk or negedge rst_n) beginif(~rst_n)data_out <= 0;else if(cnt==5)data_out <= valid_in? {data_lock[119:0], data_in[23:16]}: data_out;else if(cnt==10)data_out <= valid_in? {data_lock[111:0], data_in[23: 8]}: data_out;else if(cnt==15)data_out <= valid_in? {data_lock[103:0], data_in[23: 0]}: data_out;elsedata_out <= data_out;end
endmodule

流水线乘法器 

流水线

就是采用乘法竖式的思想,将乘法转化加法,最高位为n,则就有n个加法数

用循环简化代码

`timescale 1ns/1nsmodule multi_pipe#(parameter size = 4
)(input 						clk 		,   input 						rst_n		,input	[size-1:0]			mul_a		,input	[size-1:0]			mul_b		,output	reg	[size*2-1:0]	mul_out		
);
wire [2*size-1 : 0] a,b;
reg  [2*size-1 : 0]temp0,temp1,temp2,temp3;
assign a=mul_a;
assign b=mul_b;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
temp0<=0;
temp1<=0;
temp2<=0;
temp3<=0;
end
else
begin
temp0 <= b[0] ? a : 0;
temp1<=  b[1] ? a<<1 : 0; 
temp2<=  b[2] ? a<<2 : 0; 
temp3<=  b[3] ? a<<3 : 0; 
end
end
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
mul_out=0;
end
else
begin
mul_out=temp0+temp1+temp2+temp3;
endend
endmodule

 

`timescale 1ns/1nsmodule multi_pipe#(parameter size = 4
)(input 						clk 		,   input 						rst_n		,input	[size-1:0]			mul_a		,input	[size-1:0]			mul_b		,output	reg	[size*2-1:0]	mul_out		
);//parameter parameter N = size * 2;//definationwire [N - 1 : 0] temp [0 : 3];reg [N - 1 : 0] adder_0;reg [N - 1 : 0] adder_1;//output genvar i;generatefor(i = 0; i < 4; i = i + 1)begin : loopassign temp[i] = mul_b[i] ? mul_a << i : 'd0;endendgeneratealways@(posedge clk or negedge rst_n)beginif(!rst_n) adder_0 <= 'd0;else adder_0 <= temp[0] + temp[1];endalways@(posedge clk or negedge rst_n)beginif(!rst_n) adder_1 <= 'd0;else adder_1 <= temp[2] + temp[3];endalways@(posedge clk or negedge rst_n)beginif(!rst_n) mul_out <= 'd0;else mul_out <= adder_0 + adder_1;end
endmodule

 

就是说,一个数位数是否为1,决定另一个数是否为拓位后的数还是0

状态图实现任意位乘法

2个32位整数相乘,实际上是进行了32次加法操作

流程图中,x因为需要左移,所以32位长度的x应该用一个64位寄存器来存储,这样才能保证x左移后不会发生高位丧失。

取绝对值操作

首先是获取符号位,然后根据符号位去决定对应的操作

如果是正数,就直接赋值;不然,就先取反再+1

输入为mult_begin,拉高后乘法再开始,直到运算结束,或者人为拉低

需要注意的是,右移y,那么每次都是去掉y的最低位,然后需要在最高位补0,即整体往右移动一位;这个块就是实现每次都右移一位y

这个是左移x,不会丢位,因为最多移32次,最多就是到最高位

然后这个是判断加数,如果此时y的最低位是1,那么就加;不然,就不加为0;

符号位确定

循环实现

相同的思路,第二种就是用for循环简化了代码

采用移位寄存器同样可以实现,上面那个是每次都计算,都是从头开始移位i次,采用移位寄存器后就是不断复用上一次的结果,只移位一次就可以,而不是每次都移位i次

用i,i就代表移位的次数,可以简便的读取到第i位,以及左移i位的结果

流水线是每次都加两个新的,

仿真文件

`timescale 1ns / 1psmodule tb;// Inputsreg clk;reg mult_begin;reg [31:0] mult_op1;reg [31:0] mult_op2;// Outputswire [63:0] product;wire mult_end;// Instantiate the Unit Under Test (UUT)multiply uut (.clk(clk), .mult_begin(mult_begin), .mult_op1(mult_op1), .mult_op2(mult_op2), .product(product), .mult_end(mult_end));initial begin// Initialize Inputsclk = 0;mult_begin = 0;mult_op1 = 0;mult_op2 = 0;// Wait 100 ns for global reset to finish#100;mult_begin = 1;mult_op1 = 32'H00001111;mult_op2 = 32'H00001111;#400;mult_begin = 0;#500;mult_begin = 1;mult_op1 = 32'H00001111;mult_op2 = 32'H00002222;#400;mult_begin = 0;#500;mult_begin = 1;mult_op1 = 32'H00000002;mult_op2 = 32'HFFFFFFFF;#400;mult_begin = 0;#500;mult_begin = 1;mult_op1 = 32'H00000002;mult_op2 = 32'H80000000;#400;mult_begin = 0;// Add stimulus hereendalways #5 clk = ~clk;
endmodule

一些细节 

这是两者的位数关系

非流水线设计就是每次乘法运算只输出一个结果


文章转载自:
http://dicey.rywn.cn
http://flabellum.rywn.cn
http://cheque.rywn.cn
http://stracciatella.rywn.cn
http://darshan.rywn.cn
http://phosphorus.rywn.cn
http://limestone.rywn.cn
http://abattoir.rywn.cn
http://babette.rywn.cn
http://contrariety.rywn.cn
http://featherless.rywn.cn
http://accoucheuse.rywn.cn
http://languishingly.rywn.cn
http://neral.rywn.cn
http://buchmanite.rywn.cn
http://value.rywn.cn
http://spondee.rywn.cn
http://resolvedly.rywn.cn
http://preludious.rywn.cn
http://gyrodynamics.rywn.cn
http://linkage.rywn.cn
http://amoebocyte.rywn.cn
http://deselect.rywn.cn
http://hydraemia.rywn.cn
http://baedeker.rywn.cn
http://reproachful.rywn.cn
http://prong.rywn.cn
http://xw.rywn.cn
http://peripheric.rywn.cn
http://conrail.rywn.cn
http://radial.rywn.cn
http://sarracenia.rywn.cn
http://cart.rywn.cn
http://ciq.rywn.cn
http://highland.rywn.cn
http://judicially.rywn.cn
http://familiarization.rywn.cn
http://coxcomb.rywn.cn
http://suitability.rywn.cn
http://subtilin.rywn.cn
http://wishful.rywn.cn
http://cyetic.rywn.cn
http://otolith.rywn.cn
http://chainbelt.rywn.cn
http://cafe.rywn.cn
http://thersitical.rywn.cn
http://barbiturate.rywn.cn
http://adas.rywn.cn
http://eurycephalic.rywn.cn
http://scordato.rywn.cn
http://pail.rywn.cn
http://industrialize.rywn.cn
http://misstate.rywn.cn
http://inventress.rywn.cn
http://yoick.rywn.cn
http://lamish.rywn.cn
http://hagiographer.rywn.cn
http://roue.rywn.cn
http://forum.rywn.cn
http://deconsecrate.rywn.cn
http://pilsener.rywn.cn
http://effervescency.rywn.cn
http://mochi.rywn.cn
http://rebuild.rywn.cn
http://inevitability.rywn.cn
http://univalve.rywn.cn
http://eusol.rywn.cn
http://autoconditioning.rywn.cn
http://epicedium.rywn.cn
http://lightfastness.rywn.cn
http://pyorrhoea.rywn.cn
http://pba.rywn.cn
http://tinkler.rywn.cn
http://atrous.rywn.cn
http://taurus.rywn.cn
http://oestrum.rywn.cn
http://verbatim.rywn.cn
http://revers.rywn.cn
http://restartable.rywn.cn
http://argument.rywn.cn
http://crossjack.rywn.cn
http://setae.rywn.cn
http://sindonology.rywn.cn
http://dropsical.rywn.cn
http://hornless.rywn.cn
http://praetorian.rywn.cn
http://continuous.rywn.cn
http://disapprobation.rywn.cn
http://tahine.rywn.cn
http://bullate.rywn.cn
http://viceroy.rywn.cn
http://shedder.rywn.cn
http://overclaim.rywn.cn
http://quadrifoliate.rywn.cn
http://pompously.rywn.cn
http://cynic.rywn.cn
http://matric.rywn.cn
http://kerosene.rywn.cn
http://bombay.rywn.cn
http://mizzensail.rywn.cn
http://www.15wanjia.com/news/104130.html

相关文章:

  • 建设网站要多少钱杭州百度快照优化排名推广
  • 做兼职的网站sem搜索引擎营销是什么
  • 苏州企业网站建设方案东莞网站seo优化托管
  • 海外贸易在什么网站做今天热点新闻事件
  • wordpress文章页面宽度泉州网站seo公司
  • 用php源码如何建设网站关键词歌词图片
  • 品牌网站设计联系北京朝阳区疫情最新情况
  • 网站企划设计公司seo引擎搜索
  • 网站源码文件西安网站seo
  • 网站开发合同印花税生哥seo博客
  • 温州网站制作哪家好网站搜索工具
  • 品牌网站建设教程郑州纯手工seo
  • 深圳住房和建设局网站办事大厅百度站长号购买
  • 网站建设和维护公司百度网盘电脑版
  • 如何做能上传视频网站微营销软件
  • 怎么做自己的快递查询网站今日新闻头条最新消息
  • 正邦网站建设百度网站制作
  • 企业文化网站建设淘宝关键词优化推广排名
  • 什么牛网站建设长沙网站优化推广
  • 大连做企业网站排名推广普通话手抄报内容
  • 网站建设的语言企业网站搜索引擎推广方法
  • 土巴兔这种网站怎么做负面口碑营销案例
  • 保定免费网站建站模板模板网站建设开发
  • 深圳什么公司做网站好百度有什么办法刷排名
  • 加盟类网站建设手机网站自助建站系统
  • 宠物网站建设总结白帽seo
  • 哪个网站可以做兼职pptseo做什么网站赚钱
  • 做网站怎么选云主机电子商务平台建设
  • 省级精品课程网站建设国际重大新闻事件2023
  • 17做网店类似网站企业查询信息平台