verilog写题笔记6------- #多功能数据处理器#

多功能数据处理器

https://www.nowcoder.com/practice/e009ab1a7a4c46fb9042c09c77ee27b8

五个输入:
1、时钟信号clk
2、复位信号rst_n
3、8位有符号数据信号a
4、8位有符号数据信号b
5、控制信号select
一个输出:
9位有符号数据信号c
先插一个题外话:题目的输入输出使用了关键字signed。Verilog中的wire型和reg型是不支持负数的,要想表示负数形式,必须添加关键字signed。Verilog中的负数统一使用补码来表示。同时,如果要完成有符号数的运算,必须保证参与运算的所有变量都是有符号类型。
比方说:a=-4;b=-3;c=a+b;必须保证a、b、c都是有符号数才能输出正确的结果。
题干的意思是:在每个上升沿,select若为0,则输出a;若为1,则输出b;若为2,则输出a+b;若为3,则输出a-b。
题目为时序逻辑,所以用always实现;select不同的值对应不用的输出,很容易让我们想到case函数:
`timescale 1ns/1ns
module data_select(
	input clk,
	input rst_n,
	input signed[7:0]a,
	input signed[7:0]b,
	input [1:0]select,
	output reg signed [8:0]c   //存在加法运算,输出位数多一位
);
    
    
always@(posedge clk or negedge rst_n)
	if(rst_n == 1'b0)        //复位操作
		c <= 9'd0;
	else case(select)       //不同的case代表不同的操作
		2'd0:begin
			c <= a;
			end
		2'd1:begin
			c <= b;
			end
		2'd2:begin
			c <= a+b;
			end
		2'd3:begin
			c <= a-b;
			end
		default:begin          //case最后加default是良好的习惯
			c <= 9'd0;
			end
		endcase
endmodule



verilog写题笔记 文章被收录于专栏

写Verilog题目的一些笔记备忘

全部评论

相关推荐

LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司7个岗位
点赞 评论 收藏
分享
CADILLAC_:我要用bava 不要用java 了 啊啊啊啊啊啊啊啊啊啊啊
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务